Android手机越用越卡,谁惹的祸?
获奖名单已公布:http://bbs.chinaunix.net/thread-4233387-1-1.html话题背景
根据2014年的调查显示,截止到2014年11月底,全球安卓手机用户约7.5亿,全球每天要扫除掉清理垃圾300万GB的垃圾,相当于装满18万部16G手机,堆起来约2.7万米高,这个高度相当于约31座珠穆朗玛峰。而在全世界用户里,最爱清理垃圾的第一名是中国用户,为什么呢?因为中国人的手机经常卡的不行了。
Android手机越用越卡这句话现在几乎已经深入人心了。对待这个问题,大部分厂商在对后台管理进行优化的同时还会增大手机内存容量,以达到流畅的最终目的。vivo表示未来的X系列手机将标配4GB内存,因为只有大内存才是操作流畅的基础。标配大内存是好事儿,不过Android手机的卡顿并不是一味的增加内存就能解决了,CPU性能和闪存的性能也直接关乎到运行的流畅与否,只有面面俱到才能解决Android的顽疾。安卓手机为什么总是卡?是Android系统的原因吗,还是Java虚拟机消耗太多资源了吗?还是APP导致的?欢迎大家畅所欲言。
讨论话题
1、我们都知道Android APP主流开发语言是Java。在开发APP时,利用哪些Java的语言特性,采取什么措施可以提高程序的运行效率?
2、你对Java语言的看法,大胆预测未来Java语言的发展趋势和方向。
3、你使用Java语言开发过Android APP吗?分享你在Java语言学习和Android APP开发的经验。
讨论时间
2015-12-03至2016-01-03
活动奖励
活动结束后将选取4名讨论精彩的童鞋,每人赠送一本《Java技术手册(第6版)》图书一本作为奖励。
奖品简介
作者: (英) Benjamin J. Evans (美) David Flanagan
译者: 安道
出版社:人民邮电出版社
出版日期:2015 年11月
开本:16开
页码:329
版次:1-1
内容简介
《Java技术手册 第6版》为《Java 技术手册》的升级版,涵盖全新的Java 7 和Java 8。第1部分介绍Java 编程语言和Java 平台,主要内容有Java 环境、Java 基本句法、Java 面向对象编程、Java 类型系统、Java的面向对象设计、Java 实现内存管理和并发编程的方式。第2部分通过大量示例来阐述如何在Java 环境中完成实际的编程任务,主要内容有编程和文档约定,使用Java 集合和数组,处理常见的数据格式,处理文件和I/O,类加载、反射和方法句柄,Nashorn,以及平台工具和配置。
试读样章
http://bbs.chinaunix.net/thread-4233387-1-1.html 沙发支持下。
我们都知道android是基于java的vm做的,这个本身就存在缺陷。
我觉得,android应该脱离java vm机制,利用Linux内核api来开发,这样就能利用linux的内存管理机制,效率能提高不少 bbbbvvv
app太流氓了 本帖最后由 baopbird2005 于 2015-12-09 15:18 编辑
1、我们都知道Android APP主流开发语言是Java。在开发APP时,利用哪些Java的语言特性,采取什么措施可以提高程序的运行效率?
java的封装和对内存操作的隐藏,面向对象的开发方式,多线程处理,都是经常使用的功能。
1.如果程序中使用到循环的话,循环体中使用的对象最好在循环体外就定义好,避免重复定义。2.不要太依赖java的GC机制,在跳出变量的作用范围外,手动回收内存。将变量置为null。3.生成对象时,要分配给它合理的空间和大小 比如list,默认是size为10,当你程序中使用的空间大小大于10个时,尽量给它定义一个合适的初始化空间。4.对于程序中经常使用但是又不常变化的对象或者数据,可以使用缓存。但是也不要为了使用缓存而用缓存
2、你对Java语言的看法,大胆预测未来Java语言的发展趋势和方向。
java语言拥有大量的开发人员和大量的借鉴代码,使得开发的门槛很低,很容易上手。java的未来应该还是很不错的,不仅仅是现在的Android智能手机,在Android没有使用之前就有大规模的java用户了。java的兴起还是由于本身语言的优势存在。java未来可能要多性能和效率多多的优化
3、你使用Java语言开发过Android APP吗?分享你在Java语言学习和Android APP开发的经验。
目前所从事的工作就是Android app开发。对于需要硬件的支持的app应用,有时候是有点无语的,Android的机型和系统有很多很多种,有时候会出现不同机型的问题。让开发者很头疼。
java语言并没有系统的去学习,接触到这样的工作才开始边学边练,在实践中学习和总结,我倒感觉这样挺快的。虽然深入了解可能需要一段时间,但是对于要求不是很高的应用开发来说足够了。
以上观点仅仅个人愚见,欢迎大牛拍砖:D 本帖最后由 zero-B 于 2015-12-03 10:48 编辑
占位 +1,不过是现在编辑 :mrgreen:
作为安卓的忠实用户,我还真注意过这个问题。
1、首先说说安卓系统本身。我们都知道安卓系统衍生自 Linux,但是它并没有继承好 linux 的内存管理机制,在安卓手机 “RAM管理器” 页面还简要的介绍了安卓的“低内存管理(LMK)技术”,但是也只是说 “当内存不足时,低内存管理(LMK)通过清除最近使用最少(LRU)列表自动释放内存”,但是也没有说明这一过程是自动的?定时的?还是手动的?反正我都是手动清理。也许 google 是想让软件们都有一个守护进程在内存中常驻,以提高软件下次的打开速度,但个人认为恰恰是这个功能,从根本上拖慢了手机的运行。根据著名的28定律结合手机的常驻后台,我们也可以得出这样一个结论:80%的常驻后台实际能用上的时间不足20% !!
2、再来说说APP。也许和IOS的专制不同,安卓的APP开发者们都或多或少遵循着 GPL 协议在开发 APP,但是国内一个现实的问题就是,APP 开发者们不是大神,也需要吃饭需要生存,有时候不得不在软件里加入一点点的广告来期待获得广告收入,不用说,这个广告本身也就是常驻在内存中的,这个是原因一。原因二,APP 在开发的时候估计就没打算让它在 “退出” 程序的时候做到真正的 “退出”,好一些的是把主程序关掉,差一点的就直接转为后台运行,这样内存都能够用就奇怪了。
3、各种不 ROOT 就无法禁止的自动启动。不 ROOT,一堆的自启,ROOT,传说不质保。中国的小伙伴们各种纠结……
4、各种版本的 “个性化”。目前我使用过的安卓手机有3个品牌,HTC,三星,华为。个人认为HTC是最死板的,ROOT 成功率不算高,各种预装删不掉;三星相对较好,运营商预装的可以删除,厂商的软件也可以删除部分,但是无法管理软件自启和隐私问题;华为目前除了设计为方便左手使用不太习惯外,它的设计是最人性化的,在不 ROOT 的前提下可以删除部分软件,可以管理程序自启,可以管理程序隐私问题。不打广告,点到为止。其他的各种小厂的安卓。。。呵呵。。。。 本帖最后由 jieforest 于 2015-12-07 17:45 编辑
这问题非常好,我对目前整个Android生态环境的乌烟瘴气极不满意。随后作答。
1、我们都知道Android APP主流开发语言是Java。在开发APP时,利用哪些Java的语言特性,采取什么措施可以提高程序的运行效率?
我对提高应用程序的运行效率,通常是这么做的:
1)监控Java应用程序的运行情况
用jconsole连接到运行中的应用程序,查看其内存、线程、类、虚拟机的使用情况,查看是否有异常的地方。
比如对于虚拟机的情况,可以查看堆内存、非堆内存、内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。
2)主观判断
自己开发的应用,多做测试,多试用,很多情况自己都能摸清楚。
3)使用JProfiler、GC Viewer、VisualVM之类的工具
这些工具非常专业(当然,掌握也不容易),可以对应用程序的运行情况做比较全面的侦测,有问题大多数都能暴露出来。
2、你对Java语言的看法,大胆预测未来Java语言的发展趋势和方向。
未来Java语言的方向我是这么看的:
1)模块化
也就是目前的Jigsaw项目,在Java 9会实现模块化,可能还不完全,完全的模块化未来必将实现。
2)函数式编程
Java 8初步引入了函数式编程思想,比如Lambda表达式,但这只是初步。更进一步的函数式编程相信会继续,有些内容可以借鉴Scala编程的思想。
3)并行编程
类似于Erlang、Golang之类的并行编程语言,虽然Java社区也有Akka库,但是未来并行编程的规范相信会纳入标准Java库中,作为JDK的一部分。
3、你使用Java语言开发过Android APP吗?分享你在Java语言学习和Android APP开发的经验。
我主要是做Java开发的,Android开发也做过一段时间,主要是项目需要。Android开发我不算高手,但仍然可以谈一些。
开发Android,离不开对Java SE的掌握,这是基础,尽量做到精通。
根据项目需要,可能会有本地移动应用和跨平台移动应用的选择。本地应用显然就是使用Android SDK进行开发;而跨平台应用则是利用Web技术,做几种移动平台的通用性开发。
对于跨平台移动应用,就有很多框架可供选择了。像以前的PhoneGap、Sencha Touch、jQuery Mobile等,到目前的React之类的框架,需要根据自己的需求进行选择。
对于跨平台移动应用,精通Web技术是少不了的,JavaScript、CSS、HTML等是基本功。
最终还是汇成一句话,多做项目,多看书,在开发实践中提高自己。 4L怎么搞的那么多圣斗士徽章 1、我们都知道Android APP主流开发语言是Java。在开发APP时,利用哪些Java的语言特性,采取什么措施可以提高程序的运行效率?
尽量指定类的final修饰符带有final修饰符的类是不可派生的;尽量重用对象;尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中;不要重复初始化变量 默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值;在JAVA + ORACLE 的应用系统开发中,java中内嵌的SQL语句尽量使用大写的形式,以减轻ORACLE解析器的解析负担;Java 编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,即使关闭以释放资源;在使用同步机制时,应尽量使用方法同步代替代码块同步。
2、你对Java语言的看法,大胆预测未来Java语言的发展趋势和方向。
我觉得JAVA语言的发展到目前已经发展到了一个空前壮观的局面,但是由于科技的发展和JAVA语言的本身一些局限性,JAVA的发展必定会被其他的高级语言所代替。但是在未来的几年里,随着JAVA语言的一些规范的提出,JAVA仍就是主流的WEB和安卓的开发语言,但是现在学JAVA的人太多了,市场略显供过于求。
3、你使用Java语言开发过Android APP吗?分享你在Java语言学习和Android APP开发的经验。
这个当然,作为一个高级工程师,我写的JAVA代码可绕地球三圈,写代码最重要的就是代码的组织架构要好,好的结构会增加代码的健壮性和可扩展性,同时也能减少空间复杂度和时间复杂度。还有一点就是,效率很重要,写的多了也就写的块了,代码量是硬性条件,没有代码量,谈什么都是虚的。
第一最寂寞i 发表于 2015-12-03 10:29 static/image/common/back.gif
1、我们都知道Android APP主流开发语言是Java。在开发APP时,利用哪些Java的语言特性,采取什么措施可以提高 ...
可以分享一下,哪家发布的哪个app,谢谢 回复 9# action08
不要在意这些细节