深入分析Android4.4最重要更新

 更新时间:2016年9月20日 19:59  点击:1749
也许人们在得知Google新发布的Android系统版本名称为4.4时都不以为然,认为这个升级微不足道。就算是Google官方,对待此次升级也是颇为低调。

简单浏览了一下官方对该系统的简介,觉得比较值得关注的只有对内存的需求降低了,512MB RAM也可以轻松应付。也许很多手握小内存机型的机油们看到这里甚是欣慰,感觉老机的春天要来了。

artshow

不错,老机的春天是要来了,不过这并不是最重要的。Android4.4的杀手锏是ART,这一选项在隐藏的“开发者模式”中,一个非常不起眼的地方。这么重要的更新为什么隐藏在4.4的开发者模式中,或许谷歌官方认为ART还不够成熟,仅仅是让开发者做测试用。

经过本人实际体验,ART模式确实像网上流产的那样“兼容性差”、“高效”,至于“省电”这个特性还没有测试。开启ART模式后,手机确实流畅起来了,各类应用启动迅速,操作顺畅。但是ART也有一定的兼容性问题,部分应用无法正常运行,比如腾讯游戏在ART模式没法启动。

dualcorebenchmark

谈起iOS和Android,人们总是会认为Android需要更强大的硬件,效率极为低下的Dalvik虚拟机就是根源所在。被诟病这么多年的Dalvik虚拟机终于要被替换掉了,虽然Dalvik还是4.4的默认运行方式,不过这个版本已是它退居二线的开始。希望ART尽快成熟起来,改变Android耗费硬件的现状。

背景阅读:

Dalvik:为了能适配于各种设备和让开发人员迅速适应 Android 的平台,Android 在最初设计的时候是使用的Java 语言作为应用编写语言。编好的应用程序在运行时需要通过一个叫 Dalvik 的虚拟机进行解释编译,Dalvik负责与底层沟通。由于中间嵌套了一层虚拟机,应用程序不可能完整高效的利用到硬件的全部机能,也不太可能对某些专有方案作出特别的优化。因此 Android 的应用会比 iOS 上的执行效率慢一些。应用在运行过程中,Dalvik 通过一个叫 JIT的解释器动态的进行编译并执行,这一过程也拖慢了运行效率。

ART:Android Runtime,相比Dalvik,ART的处理机制完全不同,它会在应用程序安装时就把程序代码转换成机器语言,让程序成为真正的本地应用。这样做的好处是程序的启动时间被极大的提高,运行速度也会更快。电量消耗的更少,系统也跟着更加流畅。

由Dalvik虚拟机更换为ART,简单地说,就是Android程序运行的根本机制改变了,Android在启动程序时将像iOS一样,无须进行第二次“转换”工作了。程序会启动地更快,而且会更省资源。表现在用户体验上,就是Android更流畅了,同时续航能力显著增加。趋势上看,ART取代Dalvik只是迟早的事情。Android诞生已经7年有余,Google为了提升Android的性能已经从上到下做出了所有的努力,一直没有触及Dalvik虚拟机,若想大幅度的优化Android平台,Dalvik是非改不可。

在平时我们开发应用的过程中,我们可能需要设置一些动态变量值随着我们版本的变化一起变化 。在这种情况下,一般我们首先想到的办法可能就是我们申明一个静态的变量,然后在我们的应用中直接使用就行了,以后如果需要修改的时候,我们再找到这个类 里面的定义的地方,再重新赋值即可

当然,我们也可以通过在Menifest里面的meta-data标签来定义一个值,然后在我们的应用中直接去读取即可,这样,下次如果需要修改值,我们就不必再找到我们的代码了,而是在修改我们的版本号的时候,一起就可以修改了。更加方便与便捷。

这样的应用场景在给多市场打包的时候,你一定见过。比如友盟,有米的sdk里面就有一步为:在 application标签下定义一个meta-data来为不同的市场赋值和传入不同的appId。

那么我们的自己应用里面应该如何去定义meta-data的值呢?并且怎么在代码中取出我们要想的值 呢?

那么点击更多,跟着我一起来看看如何操作吧!!!

形如:

 代码如下 复制代码
<application ...>
<meta-data android:value="12345" android:name="APPID"/>
<activity ...>
<meta-data android:name="data_Name" android:value="hello my activity"></meta-data>
</activity>
</application>

从上面可以看出,我们的meta-data不仅仅是可以放到application标签下面,也可以放到activity下面,其实也可以放到service ,receiver下面。。。

我们分别来看看如何获取的吧?

1.获取 application标签中的meta-data:
形如:

 

 代码如下 复制代码

<application...>
<meta-data android:value="my_data" android:name="data_Name"/>
</application>
代码:

ApplicationInfo appInfo = context.getPackageManager()
.getApplicationInfo(context.getPackageName(),
PackageManager.GET_META_DATA);
String dataName=appInfo.metaData.getString("data_Name");

2.获取 activity标签中的meta-data:
形如:

 代码如下 复制代码

<activity ...>
<meta-data android:value="my_activity" android:name="data_Name"/>
</activity>

代码:

 代码如下 复制代码
ActivityInfo activityInfo = context.getPackageManager()
. getActivityInfo(activity.getComponentName(),
PackageManager.GET_META_DATA);
String dataName=activityInfo.metaData.getString("data_Name");

注意:activity.getComponentName()为获取activity实例的ComponentName 也可以用下面的代替:

 代码如下 复制代码
//通过指定一个activity类来生成一个新的ComponentName
ComponentName componentName =new ComponentName(context, SplashActivity.class);

3.获取 service标签中的meta-data:
形如:

 代码如下 复制代码
< service ...>
<meta-data android:value="my_service" android:name="data_Name"/>
</service >

代码:

 代码如下 复制代码
ComponentName componentName=new ComponentName(context, MyService.class);
ServiceInfo serviceInfo = context.getPackageManager()
. getServiceInfo(componentName,
PackageManager.GET_META_DATA);
String dataName=serviceInfo.metaData.getString("data_Name");

注意:在Service里面就没有getComponentName()方法来快速获取到当前的ComponentName了,所以只能通过指定service类的方式来生成一个新的ComponentName

4.获取 receiver标签中的meta-data:
形如:

 代码如下 复制代码
< receiver ...>
<meta-data android:value="my_receiver" android:name="data_Name"/>
</receiver >

代码:

 代码如下 复制代码
ComponentName componentName=new ComponentName(context, MyService.class);
ActivityInfo activityInfo = context.getPackageManager()
. getReceiverInfo(componentName,
PackageManager.GET_META_DATA); www.111cn.net
String dataName=activityInfo.metaData.getString("data_Name");

注意:在receiver可没有 ReceiverInfo了,而是用的activityInfo来处理的。

最后的注意:我们在获取值的时候都是使用的 是:xxxInfo.metaData.getString(“data_Name”);把所有的值都当成是String来获取的,如果在meta- data中是int型的,如果还是使用getString()方法获取出来的值是为空的,但是metaData提供了这么多种get方法来获取 。
如果metadata 的数据类型是没办法确定的,那么可以直接使用 Object object = metaData.get(key)来获取 ,然后再转化成自己要想的数据类型。

安卓手机在你上过网时都会自动在手机中保存你上过的wifi网络的密码了,下面我不来告诉大家怎么在手机中查看wifi密码吧,希望此例子对各位有帮助。

1、在手机中我们安装“RE管理器” (具体安装可以直接下载在手机安装也可以使用手机助手进入安装了,在此就不介绍了)

安卓手机查看存储过WIFI密码方法

2、现在我们打开“RE管理器”然后在里面找到“date”目录,如图所示

安卓手机查看存储过WIFI密码方法

3、然后我们在data目录中会看到有一个“misc”文件夹,如图所示

安卓手机查看存储过WIFI密码方法

4、同样我们在misc目录中找到“wifi”如图所示。

安卓手机查看存储过WIFI密码方法

5、现在为最关键的一步了,我们在wifi目录里会看到一个配置文件了,我们点击“wpa_supplicant.conf”文件

安卓手机查看存储过WIFI密码方法

会看到很多netword{}里面有ssid,psk之类的字符了,ssid是wifi用户名,psd是此wifi密码了,这样我们就找到了呀。

安卓手机查看存储过WIFI密码方法
安卓4.2版本及以上版本的系统都会把开发者选项给隐藏了,一般用户是找不到开发者选项在哪里的,下面一聚教程小编就来告诉你如何开启android4.2系统的开发者选项吧。

1)我们在手机中找到“设置”一般在设置中就会有一个系统中的“关于手机”然后我们点击它进入,在关于手机中我们会看到有一个“版本号”现在我们需要连续点击版本号,然后你会看到系统即提示“您现在处于开发者模式”。

安卓手机开发者选项在哪里? 安卓手机开发者选项在哪里?

2)好了等待开启完成之后我们再回到手机的“设置”这个时候你会发现在手机中会有一个“开发者选项”了,现在我们点击它进入,然后就可以“ROOT授权”控制,“usb调试”等。

安卓手机开发者选项在哪里? 安卓手机开发者选项在哪里?

一聚教程小编提醒你,如果你是安卓4.2以前的版本我们直接在设置中就会有usb模式了这个就不需要这样操作打开了呀。

卓手机和平板越用越慢?貌似挺多人会这么觉得。好吧,一起来看看设备变慢的原因和如何提速。当然这不是只是安卓才有的问题——可以用用iOS7的iPad3,看看会变得有多慢——但貌似确实很多安卓用户会反映这个问题
OS更新和大型应用
比起一年前,你的手机上的应用几乎全部换了。如果有安卓系统更新,要么更新可能并没有针对你的设备很好的优化,其结果就是你的设备变慢了;要么运营商或制造商在更新中捆绑更多的软件,这些软件在后台运行并拖慢了设备。
即使你没有更新系统,比起一年前设备会安装更新的应用,无论新应用还是一个应用的新版本,应用几乎总是越来越重。因为应用开发者会接触到更快的智能机硬件,游戏和其它应用会针对这些更快设备来优化,结果在老设备上性能越来越差。这个现象在各个平台都一样。年复一年,网站变得更重,桌面应用要吃更多内存,游戏要更好的硬件来运行。
解决方法:这个问题作为用户没有太多可以做的。如果系统变慢了,你可以装个定制的ROM比如CyanogenMod,定制ROM没有捆绑软件和制造商的皮肤(很多设备都有)。如果应用变慢了,可以去找找更轻的应用。

 安卓Android手机越用越慢,如何提速?

后台进程

设备用的过程中会安装越来越多的应用,有些应用是开机启动并后台运行,消耗CPU并占用内存。后台应用多了设备就慢了。安卓支持真正的多任务,所以应用可以后台运行。
如果在主屏使用动态壁纸或是放了很多小部件,会消耗CPU、显卡和内存。清理主屏就能提升设备速度。
后台运行的应用会消耗资源,检查后台进程可以查看设置(Settings)应用,切换到【正在运行】(Running)一栏。看到不使用的应用在后台运行,卸载掉这个应用。如果应用是设备自带的应用不能卸载,就禁用掉。不要只是点停止服务,应用还是会自动启动的。
解决方法:禁用动态壁纸,删除小部件;卸载或是禁用不用的应用(或许你想卸载所有你没用过的应用)。
android-view-background-processes
存储空间快满了
固态硬盘没有剩余空间会变慢,所以在文件快满的情况下写操作会很慢,结果是应用运行很慢。在设置应用的存储界面可以查看设备存储的使用量以及是什么消耗了存储空间。
如果不定期检查,缓存文件会占用很大一部分空间,清理缓存文件可以释放出磁盘空间,让文件系统性能更好。打开设置应用,点开存储界面,往下滚动,点击缓存数据,再点确定,可以一次性清理所有应用的缓存文件。
解决方法:卸载不用的应用,删除无用的数据,清理应用缓存释放存储空间。也可以重置到出厂设置、只装要用的应用,这样变回一个『新』设备了。
android-manage-device-storage
没有启用固态硬盘的TRIM
缺乏合适的TRIM支持是导致Google原版的Nexus 7平板越用越慢的主要原因。在安卓4.3加上了合适的TRIM支持,Nexus设备上更新到安卓4.3都可以解决这个问题。
如果你的老设备不支持安卓4.3,可以ROOT设备后安装LagFix应用来添加TRIM支持。这个应用在后台运行和安卓4.3一样的fstrim命令。由于固态硬盘运行方式,固态硬盘会越用越慢,TRIM是必须的。固态硬盘越用越慢是因为闪存单元在再次写入前需要先清除。TRIM可以预先清除删除了的文件所在闪存单元中的数据,这样保证安卓写入数据到闪存单元时可以尽快完成。
解决方法:如果你的是老设备,ROOT并安装LagFix应用。在安卓4.3及以后版本这个已经自动做好了。
android-lagfix-fstrim
总结
重置设备到出厂设置、只安装要用的应用,可以一票删除所有老应用和文件。重置到出厂设置虽然不能解决捆绑应用和在存储上运行TRIM,但有助如于解决越用越慢的问题,你懂得,就像重装Windows有助解决PC越用越慢

 

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • MYSQL事务回滚的2个问题分析

    因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 ...2014-06-07
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • vivo OriginOS新系统如何更新 originos系统更新方法

    vivo新系统更新的步骤是什么?如何更新到vivo的最新系统?vivo的最新系统太亮眼了,不少vivo的用户都在跃跃欲试想体验一下最新的系统。vivo新系统虽然做出来了不过我们想体验的话还是要等待一段时间。到时大家通过下面的方法就可以使用到新系统了...2020-12-08
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20