你曾经历过晚上忘了为手机充电,而到了早上才发现手机已经完全没有电的情况吗?你遇到的这种情况很可能与安卓系统固有的设计缺陷有关,尤其是系统糟糕的后台应用程序管理设计。但这种问题很大程度上也源于你无意中安装的一些设计不良应用软件。这两个问题共同降低了你电池续航能力。
然而,只要安装3个特殊的应用程序,并遵守一些简单的软件管理方法,你就能在很大程度上延长手机电池的待机时间。为了在实践中得到最佳的效果,我们要用一个自动杀死程序的工具,一个电池省电程序,和一个能够在电池快用完时自动地鉴别和移除程序的管理软件。同时,尽可能少地安装应用程序。
我要说明一下,本文中介绍的方法并不是一种常用的标准省电方法。所以,我推荐用本文作为引导,结合常规方法和其它一些靠得住的电池管理方法一起来解决电池续航问题。
安卓糟糕的电池寿命&如何提高它
一个设计糟糕的应用程序会做两件事。第一,它会偷偷地在后台启动。第二,它会经常地访问你手机的无线数据。其中,第一件事会让你的手机无法进入“深度睡眠”状态,这样手机就无法进入节电模式。第二件事会让你的手机消耗更多的电量用于数据传输。
这说明了一个问题,安卓系统对于行为不端的程序没有过多的干预和控制。事实上,大多数应用程序可以随意启动并占用系统资源,只要它们愿意。
原生的安卓系统只会在内存快要耗光时才杀死相关的应用程序,这又会导致多个应用程序在后台运行,并时不时地检查数据连接通道。我们自己本身也没有经常去卸载应用程序的习惯。任何时候,只要手机在传输或接收数据,这个过程都将消耗大量的电量。常规方法在这方面会有一些作用,尽管效果不太理想。
虽然,少数几个处于活动状态传输数据的应用程序对你的电池没有威胁。但问题来了,当有20-30个应用程序在不断地争夺无线连接的控制权时,情况会如何呢――传输数据的程序越多,系统消耗的电量就越多。在某种程度下,你应该考虑为你的应用程序兵器库瘦身。这又带来一个新问题,如何瘦身?
如何找到行为不端的应用程序&延长电池续航时间
幸运的是,有一些应用程序能够极大地提高你电池的寿命和性能。这种软件主要分为三大类:
- 启动分析工具
- 应用程序杀手
- 内核沉睡者
第一类是启动分析应用程序,它能找出哪些应用程序会在后台不时地启动。在这类软件中,我最钟爱的这款应用甚至都不需要获取root权限。Autorun Manager能够用最好的方法来找到那些经常在后台启动的程序。
这个过程很简单――安装、运行Autorun Manager。启动后的第一个界面会显示一个列表,这个列表包含所有你已安装并有启动意图的应用程序。
接下来,点击一个正在后台运行的应用程序。睁大你的眼睛看着单词“startup”或“boot”。通常这表明这个应用会在后台运行,并占用你的数据连接资源。
如果一个应用有后台启动的意图,但你又无法通过应用本身关闭后台启动的功能,在这种情况下,假如你几乎从来不用这个应用的话,那么我建议你卸载它。
然而,要特别注意的是,并不是所有的有启动意图的应用都是有害的。我的手机里就有个例子,JustReader喜欢在后台同步数据,因此它会在系统启动时快速加载。尽管这对我延长电池寿命没有好处。
第二类程序,我称之为“应用杀手”,主要用于清除后台运行的应用程序。虽然根据原生安卓的设计,当RAM变得吃紧时,系统会杀死一些应用程序。但是这并没有阻止应用程序滥用数据的权限。
不幸的是,许多应用程序经常在后台启动,唤醒内核,然后访问数据连接资源,这些都会进一步消耗电池电量。一个后台程序杀手能够有效地降低那些写得很差地且能自动运行的程序对系统的影响。在所有我试用过的应用中,我最喜欢的是Smart RAM Booster。
安装完此应用后,首先进入到“settings”。然后,点击“Auto Boost Settings”。接着,选中“Boost automatically”选项。这个设置将杀死那些在后台启动的应用,同时也在某种程度上保持电量。
第三类应用促使你的手机更合理地进行休眠。我最喜欢的这类应用程序是Deep Sleep Power Saver,它专注于如何快速地使手机内核进入深度睡眠状态,这种状态可以最大限度地降低电池的消耗。
我喜欢这个应用是因为它简单易用。仅在安装过后,它就开始保存你电池的电量。事实上,如果你选择了“slumberer profile”,Deep Sleep Power Saver就会像一个无界面的应用杀手一样自动运行。
最佳实践:安装尽可能少的应用程序
有些专家,例如Whitson Gordon,会建议通过获取root权限来删除一些臃肿的软件。但是我并不主张获取root――在本站问答区比较知名的专家Rajaa Chowdhury对此总结得非常好,他说“Root是不值得的”,因为这违反了保修条款。现在的手机动不动就要几百美元,这种风险(破坏你的手机)与你所获得的(得到4天的电池寿命)并不成比例。
最好的策略就是保持你所安装的基础应用足够的少。更少地安装应用意味着更少的应用会在后台运行,更少的应用会唤醒手机内核,同时更少的应用会通过3G或LTE这种高耗电的方式传输数据。
总结
有了这三个简单的应用,和一个最小的应用程序配置文件,就有可能“挤出”一个能待机四天的安卓手机。当然,每个人的情况可能不同,这取决于你邻近的一个移动蜂窝塔。
最后,我可以得出这样的结论,使用这三种应用程序,结合一个最小的应用配置文件,能够使我的电池寿命从24小时延长到4天。
原文:Kannon Yamada 编译:伯乐在线 – 肖翔
【非特殊说明,转载必须在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】
由于对老罗的演讲很感兴趣,所以很早就开始关注老罗(@老罗),从一开始老罗在微博上说现在市面上的安卓如何如何烂,现在的安卓程序员怎么怎么样弱之后,我就觉得老罗应该会涉足手机这一块,但是真的当他在哪里吼着说要做自己的ROM的时候,我还是觉得老罗太疯狂了,也许就是就是这么个疯狂的家伙,才会在微博上对现在的安卓系统各种嘲弄,各种不屑,各种吐槽......
这次老罗发布的锤子ROM在详细观察过发布的图片/报道/视频后我觉得,总体上讲,UI和人性化的设计多于功能性的和底层的创新。其实作为一个iphone&android用户,真心觉得目前市场的手机在很多东西设计真TM操蛋,比如iphone的通讯簿,简直让我疯掉了某些功能和人性化程度还不如以前买的山寨机;比如图标,我也觉得很奇怪,都TM方形圆角(联想的图标貌似是圆形的),此奥,久而久之,就连我们我们网页设计师也把INPUT框全干成这样的,简直so crazy!!!带来的审美疲劳,以至于后来出现的Metro风格最简单的色块都让我觉得激动的眼泪鼻涕一大把(实在受不了了)。但是,偏偏nokia把lumia作为NM的高端手机发展再加上微软动不动就不支持之前版本,我真心不敢入手。
回到正题,按照老罗初期的想法是组建一个六七人的技术开发团队,包括3个UI设计师,1个产品经理,三四个人做用户体验,所以设计出来的ROM自然是在UI和人性化上做的文章比较多,其实仔细想想这样策略是对的,对于80%用户来说,他们就是关注这些UI层面的东西,若是你在底层再TM优化,把运行速度和能耗提高个10%,用户基本都感觉不出来,小白用户不会跟你说“哦赛,运行的好快哦!”
再TM想想现在的产品设计也是,往往在第一时间抓住用户眼球的都是UI层面的东西,在参与多次用户沟通会后更觉得如此。当然作为产品经理和设计人员自己要明白,客户要炫是可以,但是炫的同时要保证业务的正常流转,要保证产品核心价值的延续。比如做一个CRM系统,你就是把页面做的再好看,报表再怎么华丽的展示,但是没法帮助公司更好的服务客户都是浮云。
原问题来自于CSDN问答频道,更多见:http://ask.csdn.net/questions/1964
问题描述:
我创建了一个按钮数组,当点击每一个按钮时都会调用 onClick 方法。在那个方法中,如何获得按钮的位置,比如行和列的位置?
创建 buttons 数组:
LinearLayout layoutVertical = (LinearLayout) findViewById(R.id.liVLayout); LinearLayout rowLayout=null; LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT,1); //Create Button for (i = 0; i<6; i++) { rowLayout = new LinearLayout(this); rowLayout.setWeightSum(7); layoutVertical.addView(rowLayout,param); for(j=0;j<7;j++) { pBtnDay[i][j]=new Button(this); rowLayout.addView(pBtnDay[i][j],param); pBtnDay[i][j].setOnClickListener(this); } } return true;
onClick 方法:
Button b = (Button)view; txtDate.setText(b.getText()); boolean bStartDate=false;
现在onclick方法中,我可以使用 Button b=(Button)view 获得每个按钮的文本。如何找按钮数组在布局中的横竖坐标位置?
:
你可以使用Button.setTag()并保存 j 和 x的值
class ButtonPosition { int x,y; public ButtonPosition(int x,int y){ this.x = x; this.y = y; } } ...... for(j=0;j<7;j++){ pBtnDay[i][j]=new Button(this); rowLayout.addView(pBtnDay[i][j],param); pBtnDay[i][j].setOnClickListener(this); //Save the position pBtnDay[i][j].setTag(new ButtonPosition(i,j)); }
在 onClick 方法中查找位置
..... Button b = (Button)view; ButtonPosition p = (ButtonPosition)b.getTag(); .....