Android高级第十一讲之不同系统间的区别

简介:  本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Android系统不断的升级,从基础到中级再到高级,逐步升级是软件工程敏捷开发的一个重点,在每个版本中升级不同功能,以满足越来越丰富的用户需求,作为一名开发者,熟悉各个版本之间的异同,有助于做产品适配、安全等各方面业务。


 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!

Android系统不断的升级,从基础到中级再到高级,逐步升级是软件工程敏捷开发的一个重点,在每个版本中升级不同功能,以满足越来越丰富的用户需求,作为一名开发者,熟悉各个版本之间的异同,有助于做产品适配、安全等各方面业务。

2.3,加入陀螺仪等一些传感器支持和前后相机支持(Android变得越来越流行,尤其是经典的三星I9100)

3.0,加入Fragment支持(主要为支撑平板而研发)

4.0,

1、多核处理器优化,据说比3.0快1.8倍(多线程能不快嘛)

2、支持HttpResponseCache(本地缓存,有效降低服务器压力)

3、加入activityLifeCycle,有效监听activity生命周期

4.2,引入多用户支持(微信、微博、QQ、支付宝都可以当成手机账号)

默认content provider是私有的

4.3,提供SELinux,防止应用把自身文件改成公共的,以免产生漏洞

4.4,

1、提供访问多个外存设备的功能,虚拟机改为ART,好处在于:答案; 

2、AlarmManager在低电耗时可以通过setWindow和众多定时事务一起发生,也可以通过setExact来在特定时间发生, 而之前的setRepeating方法将不再准确;提供完善的打印框架,短信只有默认程序才可以读写信息

3、 之前版本的webView可以随意被人用js调用本地方法,这个版本要求必须对调用方法加入@JavaScriptInterface才 有效,那么可以选择性的将方法给H5端。

地址:https://developer.android.google.cn/about/versions/android-4.4.html

        5.0,支持arm、x86和mips,全面兼容64位,声音和振动通过Notification来添加 ,ART全面替换Dalvik

地址:https://developer.android.google.cn/about/versions/lollipop.html

使用JobSchedule来执行后台轮循操作,减少操作不当引起的内存和电量消耗

5.1.1,

1、支持多dex的multidex出现

2、FileProvider出现,敏感权限需要申请

https://developer.android.google.cn/reference/android/support/v4/content/FileProvider.html

用来临时赋予权限,只要获得权限的组件(activity或Service等)不回收,则权限一直存在。可以通过

Intent.setFlags来设置权限

6.0,主要改动,需检查自己需要的权限是否被赋予,低电耗禁止JobSchedule、网络请求和同步、AlarmManager(设置setAndAllWhileIdle或setExactAndAllowWhileIdle(),来让闹钟来临前几分钟唤醒屏幕),去掉对Apache的支持,如需要则在gradle添加下面代码

 
 
android {
    useLibrary 'org.apache.http.legacy'
}

地址:https://developer.android.google.cn/about/versions/marshmallow/android-6.0-changes.html 

7.0:主要改动面向6.0以下的应用,后台服务会被直接干掉,并限制锁屏后对Cpu和网络的调用。

地址:https://developer.android.google.cn/about/versions/nougat/android-7.0-changes.html

8.0:

1、加入Fragment的LifeCycleCallback,有效监听其生命周期

2、无法在manifest里注册隐式广播

3、修复权限组一个权限被授予,其他也被授予的问题(比如storage的read和write)

地址:https://developer.android.google.cn/preview/behavior-changes.html

总结:虽然新的系统会让手机性能更佳,但默认也会给应用添加许多限制,比如4.4添加ART后对定时器的限制,6.0对文件写入sd卡的限制(即使用户把所有权限都给到你,那稍后默认又会收回你的部分权限)。新的系统对用户来说是更好的体验,对开发者来说是更多的工具,但同时也是新的挑战,所以Gradle中要慎重添加下面这句代码targetSdkVersion 24。

打包方面:正式包一定要加下面这句。

release {    // 如果要支持最新版的系统 Android 7.0    // 这一行必须加,否则安装时会提示没有签名    // 作用是只使用旧版签名,禁用V2版签名模式    v2SigningEnabled false}

如果要使用新的签名,可以参考http://blog.csdn.net/reboot123/article/details/51261558

网上找了个系统对文件读取和存储的权限处理方法,可见系统对权限管理的敏感性。

对SharePreference的存储权限做过限制。java.lang.SecurityException: MODE_WORLD_READABLE no longer supported

读取屏蔽号码,阻止来电和不必要的短信骚扰

提供新的签名方式 APK Signature Scheme v2,加速apk安装过程

在主配置文件设置的流量、图片和视频监控广播无效,但代码实现依然有效。

读写私有文件不再允许设置MODE_WORLD_READ/WRITEABLE权限

使用FileProvider

使用FileProvider的大致步骤如下:
第一步:在manifest清单文件中注册provider

 
 
< provider
android:name = "android.support.v4.content.FileProvider"
android:authorities = "com.jph.takephoto.fileprovider"
android:grantUriPermissions = "true"
android:exported = "false" >
<meta-data
android:name = "android.support.FILE_PROVIDER_PATHS"
android:resource = "@xml/file_paths" />
</ provider >

心得:exported:要求必须为false,为true则会报安全异常。grantUriPermissions:true,表示授予 URI 临时访问权限。

第二步:指定共享的目录

为了指定共享的目录我们需要在资源(res)目录下创建一个xml目录,然后创建一个名为“file_paths”(名字可以随便起,只要和在manifest注册的provider所引用的resource保持一致即可)的资源文件,内容如下:

 
 
<?xml version="1.0" encoding="utf-8"?>
< resources >
<paths>
<external-path path="" name="camera_photos" />
</paths>
</ resources >
  • <files-path/>代表的根目录: Context.getFilesDir()
  • <external-path/>代表的根目录: Environment.getExternalStorageDirectory()
  • <cache-path/>代表的根目录: getCacheDir()

心得:上述代码中 path="",是有特殊意义的,它代码根目录,也就是说你可以向其它的应用共享根目录及其子目录下任何一个文件了,如果你将path设为 path="pictures"
那么它代表着根目录下的pictures目录(eg:/storage/emulated/0/pictures),如果你向其它应用分享pictures目录范围之外的文件是不行的。

如果设为".",则整个文件夹都被共享,但fileProvider的目录是只共享自己目录,而且只让自己应用知悉;而非让所有应用都得知此文件,进而产发安全隐患。

第三步:使用FileProvider

上述准备工作做完之后,现在我们就可以使用FileProvider了。
还是以调用系统相机拍照为例,我们需要将上述拍照代码修改为如下:

File file=new File(Environment.getExternalStorageDirectory(), "/temp/"+System.currentTimeMillis() + ".jpg");

 
 
 
if (!file.getParentFile().exists())file.getParentFile().mkdirs();
Uri imageUri = FileProvider.getUriForFile(context, "com.jph.takephoto.fileprovider" , file); //通过FileProvider创建一个content类型的Uri
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); //设置Action为拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //将拍取的照片保存到指定URI
startActivityForResult(intent, 1006 );

N:敏感权限全部要App申请用户同意,大体分两类运行前申请和运行中申请两种;编辑框的文字可以定义除开复制、粘贴、全选这些功能;通知栏可以让用记回信息,点赞-支持快速回复;添加系统级电话黑名单;支持VR

https://developer.android.com/reference/android/support/v4/content/FileProvider.html

谷歌官方博客:https://android-developers.googleblog.com/全英文

NDK开发:https://developer.android.com/ndk/guides/stable_apis.html

目录
相关文章
|
6天前
|
搜索推荐 Android开发 iOS开发
探析安卓与iOS系统的优劣
【2月更文挑战第7天】安卓与iOS是当今手机市场上最主流的两款操作系统,各有优劣。本文将从用户体验、开放程度、生态系统等方面对两者进行深入探析,以期帮助读者更好地了解它们的特点。
|
7天前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
14 4
|
2月前
|
安全 Android开发 数据安全/隐私保护
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
36 1
|
2月前
|
Android开发
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
26 0
|
2月前
|
数据可视化 Android开发 容器
Android UI设计: 请解释LinearLayout、RelativeLayout和ConstraintLayout的区别。
Android UI设计: 请解释LinearLayout、RelativeLayout和ConstraintLayout的区别。
41 5
|
2天前
|
搜索推荐 安全 Android开发
安卓与iOS系统的用户体验比较
【2月更文挑战第11天】 在当今移动设备市场上,安卓和iOS系统一直是两大主流操作系统。本文将从用户界面设计、应用生态、系统定制性等方面对安卓和iOS系统进行比较分析,旨在探讨两者的优势和劣势,为用户选择合适的操作系统提供参考。
|
4天前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的发展趋势
【2月更文挑战第9天】 过去,人们对于安卓和iOS系统的争论主要集中在性能、用户体验和生态系统的比较上。然而,随着移动互联网的快速发展,两大操作系统在人工智能、物联网、安全性等方面的发展趋势也备受关注。本文将探讨安卓与iOS系统在技术发展方面的差异以及未来的发展趋势。
|
6天前
|
搜索推荐 Android开发 iOS开发
探讨安卓与iOS系统的用户体验差异
【2月更文挑战第7天】 在当今移动互联网时代,安卓和iOS系统是最受欢迎的手机操作系统。本文将从用户界面设计、应用生态系统、定制性能等方面探讨安卓与iOS系统的用户体验差异,为读者提供更深入的了解。
|
7天前
|
安全 开发工具 Android开发
安卓与iOS系统的优缺点比较
【2月更文挑战第6天】 安卓和iOS是目前市场上最流行的两种操作系统。虽然它们都拥有自己的独特之处,但它们也有一些共同之处。本文将探讨这两种操作系统的优缺点,并对它们进行比较。

相关产品

  • 云迁移中心