优化服务app
1. 优化类APP有用吗,原理是什么,为什么优化了系统还是卡
一、尽量减少Service的使用:
当你的app需要使用service来处理后台任务的时候,要保证当前的任务完成时,该service也要停止。另外,要注意的是,当停止这个service的时候,不要引起它的泄漏。
当启动一个service之后,系统总会保持这个service处于运行状态。这样,就会占用大量的RAM。所以,app的运行效率就会因此降低。
保留没有用的service最可怕的内存管理错误。所以,一定要牢记,没有必要使用service的时候就不用,用完了一定要记得将它销毁,,,,
二、当界面变为不可见时,要记得释放内存:
当用户跳转到其他界面时,并且当前界面不再可见的时候,要记得释放当前这个界面中的资源。
当用户退出某个界面时,记得在你的activity中实现onTrimMemory()(api4.0及以上)这个回调方法。调用这个方法,系统会收集不需要的内
三、当内存变少时,释放内存:
在你的app运行过程中,当运行该app的设备所剩的RAM变得很少时,系统就会调用onTrimMemory()这个方法,这个方法中有几个参数,表示不同的状态。onTrimMemory()的具体使用,还请大家参加Android的开发文档吧,本人手懒,就不详细介绍啦。
四、检查你所需要使用的内存:
可以通过getMemoryClass()估计一下你的app可用的heap。当你的app所需要的内存超过了这个可用值时,好了内存溢出就出现了。
这里有一个很特殊的方法,可以通过在manifest <application>标签中将largeHeap的属性值设置为true来请求更大的内存,主要注意的是,如果你采用了这种方法,那么当你想要获取可用内存时,就要使用 getLargeMemoryClass()。
不过由于每台机器的RAM是有限的,所以用这个还是小心吧,不需要用的时候还是不用了吧。
五、避免由bitmap引起的内存浪费:
bitmap还是很占内存的啊,当我们使用它的时候一定要小心。有几个需要注意的方法:
1、不要直接使用这样会占用很大的内存,使用BitmapFactory.Options设置inSampleSize,根据手机屏幕大小来设置bitmap的大小, 这样做可以减少对系统资源的要求。
2、缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新加载到内存;
3、采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;
4、最后就是最重要的一点,当bitmap使用完之后一定要记得回收,,,
六、使用优化过的数据容器
尽量使用 SparseArray, SparseBooleanArray, LongSparseArray 等经过优化的容器类。通常来说HashMap的效率时比较低下的。
七、小心使用抽象类(方法)
适当的使用抽象类和方法能够使我们的代码更加灵活、易维护,但是这样会增加app的内存占用。所以,那些无关痛痒的东西,还是别抽象了。
2. 移动 app 从哪些 方面优化
定了四个方向:
- 响应时间(Response Time)
- 界面卡顿(ANR)
- 耗内存(Memory)
- 内存泄露(Out of memory)
响应时间
这里指的是客户端与服务端交互,拿到数据、解析、再到显示到界面整个过程耗费的时间。
这个部分涉及客户端的优化,也涉及服务端的优化,这里只讨论客户端。
HTTP请求方式
我们的app一般离不开网络,请求接口是最平常的操作了,如何请求,请求什么我们在开发初期就要定好,服务端给我的提供的接口,大致可以通过GET、POST、HEAD、PUT、DELETE这几种请求方式,不同的请求方式有不同应用场景,比如GET请求,应当用来请求返回结果,参数是作为url的一部分;POST请求,用于请求会更改服务端数据或状态;HEAD请求跟GET一样,只是服务器不能在响应里返回消息主体;PUT请求,用于将网页放置正确的地方;DELETE请求用于删除服务器指定文档。
使用优秀的开源Http框架是我们比较好的选择,它的优点是经过市场的验证,很多坑都被填过,缺点也是我们需要去深究它才能对其进行扩展,遇到坑也不一定能填。
如果自己造轮子的话,还需要我们花时间去验证去适应我们的业务需求,但好处是我们可以自己去扩展可把控,不过这很考量开发者的素质。
数据解析
实际开发当中服务端的返回数据格式无非就两种:
- JSON
- XML
这两种格式数据格式各有优劣,从可读性来看,xml略微好一点,不过JSON也有规范的标签,从解析难度和速度来看,大家都比较倾向使用JSON,目前JSON也是主流的数据格式。
在Android中均可以使用优秀的解析库来加快我们的解析速度,XML中有dom4j,JSON有Jackson、Gson,我们通过这些库实现我们更快的完成数据解析,提高我们的开发效率。
数据存储
上一节讲的是数据解析,我们解析完后的数据,可能就需要将数据存储在某个地方,Android的五种存储方式:
- Content Provider(主要用来向其他应用程序共享数据)
- SQLite(存储数据到数据库中)
- File(本地文件保存)
- SharedPreference(主要用来保存简单的配置信息)
- 网络存储(WebService返回的数据或是解析HTTP协议实现网络数据交互)
为了提高应用程序的响应时间,数据缓存是一个比较好的方式,我们可以预处理服务器返回的数据,对数据进行缓存刷新。
优化点:
- 异步请求网络数据
- 预处理服务器返回数据
- 异步进行数据存储操作
- 数据缓存刷新
- Timeout超时重试
- 在主线程中操作UI
界面卡顿
ANR表示”应用程序无响应”,这个是需要我们避免发生的事情,出现这个异常的原因:
- 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件
- BroadcastReceiver在10秒内没有执行完毕
导致ANR的原因有很多,一般情况就是在UI线程做了耗时的操作,例如”网络请求”、数据库操作。
那么如何避免?
- UI线程只做界面刷新,不做任何耗时操作,耗时操作放在子线程来做
- 可以使用Thread+handle或者AsyncTask来进行逻辑处理
耗内存
每部手机的内存有限,我们这里所说的内存指的是手机的RAM,它是Ramdom Access Memory的缩写,我们应用程序的需要随机读写的数据就存在RAM中,Android手机之所以会比较耗内存,这跟Android后台的处理有关,我们知道Android应用是使用Java开发的,运行Java需要有虚拟机,说明每开启一个应用都会创建一个虚拟机,而这是需要内存的,所以我们开的应用越多,后台进程越多,内存都分配出去了,才导致内存消耗的严重。
其实这个问题我们是没得破的,只要内存不够,我们的应用还是会卡。我们开发的应用依赖与系统给我们分配的堆内存,一般上限在16M~48M,但我们可以通过在AndroidManifest设置Application属性largeHeap=“true”来申请更多的堆内存。
通过以下代码获取可用堆内存限制:
mActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
mMaxMemory = mActivityManager.getMemoryClass();1212
内存泄露
内存泄露这个问题已经被说烂了,大家都知道有内存泄露这个问题存在,但为什么会发生内存泄露?
这里的内存泄露并不是真正意思上的泄露,而是因为内存不足不能进行GC操作,从而导致占用内存过大,抛出out of memory异常,而被系统Kill掉。
JVM回收机制
是时候讲讲JVM的回收机制了,看下图:
JVM对Java对象分了三个代进行管理,分别为年轻代、年老代、永久代。
年轻代(Young Generation):绝大多数的Java对象会在年轻代被分配,也会在年轻代被回收。
年老代(Old Generation):在年轻代长期存在没有被回收的Java对象会转移到年老代,这个堆空间通常会被比年轻代的堆空间要大。
永久代:存放VM和Java类的元数据,以及interned字符串和类的静态变量。
这里涉及到JVM的相关知识,这里不继续深入探讨。
但我们应该可以知道垃圾回收器的作用:
- 分配内存
- 保证所有正在被引用的对象还存在于内存中
- 回收执行代码已经不再引用的对象所占的内存
对象引用
Java的引用类型可以分为以下几种:
- 强引用(Strong Ref):强可达,去掉强可达,才会被回收。
- 软引用(Soft Ref):内存够用,就保持,内存吃紧,则回收,主要用来做缓存。
- 弱引用(Weak Ref):比Soft Ref弱,即使内存不吃紧也会被回收。
- 虚引用(Phantom Ref):不会在内存保持任何对象。
3. 哪个优化安卓手机APP
如需下载第三方应用软件(好玩的游戏、常用工具应用、系统辅助工具等),建议可以专通过自带的应用商店属或手机论坛等搜索目前较为热门的软件。
1、若您的手机自带应用商店,可以按照如下方式查找:应用程序-应用商店-点击热门推荐”可以查看到当前较为热门的软件/游戏。您也可以按照分类,根据软件类型选择自己喜欢的软件
2、 通过手机浏览器搜索需要的软件下载安装(若是自带的浏览器,下载的安装包保存在我的文件-Download文件夹中)。
3、通过第三方助手类软件下载安装需要的程序。
4、通过电脑下载APK格式的安装包,然后传输到手机中安装。
4. 手机用什么app优化
部分三星手机内置“智能管理器”或“内存管理器”程序,用以控制手机启专动自运行应用程序属数量、清除垃圾文件、扫描设备并查找是否存在威胁设备的恶意软件或未经授权的系统更改等。
如手机中没有内置“智能管理器”,若担心手机会受到第三方不明软件的影响时,建议您可以通过三星应用商店或其他安卓市场类软件中下载安全优化软件。
5. 在app store 上怎么做app优化排名
重点关注几个数据:
1)app新增、留存、日活、用户评论评星
2)当前版本关键词覆盖、及搜索排名情况
3)当前流量来源,是否有一些外部渠道可用,量有多少
从这些数据上大致可以判断出一款app当前所处的阶段,从而制定不同的关键词优化策略。
(1)搜索优化:1、展现优化(应用名、关键词、iap、厂商)
(2)排序优化(历史下载和当前下载);
(3)相关搜索优化:首文字优化;
(4)榜单优化:以合作冲量,限免冲量,刷榜冲量为主;
(5)转化率优化:icon,厂商名称,描述,评价优化。
6. 优化管理的app有哪些
优化什么呢,如果是优化手机系统可以选择360手机卫士或者腾讯手机管家,是目前比较主流的软件
7. app优化工具有哪些怎么优化
吆喝科技的ab测试
8. 如何优化app的运行内存占用
一、尽量减少Service的使用:
当你的app需要使用service来处理后台任务的时候,要保证当前的任务完成时,该service也要停止。另外,要注意的是,当停止这个service的时候,不要引起它的泄漏。
当启动一个service之后,系统总会保持这个service处于运行状态。这样,就会占用大量的RAM。所以,app的运行效率就会因此降低。
保留没有用的service最可怕的内存管理错误。所以,一定要牢记,没有必要使用service的时候就不用,用完了一定要记得将它销毁,,,,
二、当界面变为不可见时,要记得释放内存:
当用户跳转到其他界面时,并且当前界面不再可见的时候,要记得释放当前这个界面中的资源。
当用户退出某个界面时,记得在你的activity中实现onTrimMemory()(api4.0及以上)这个回调方法。调用这个方法,系统会收集不需要的内
三、当内存变少时,释放内存:
在你的app运行过程中,当运行该app的设备所剩的RAM变得很少时,系统就会调用onTrimMemory()这个方法,这个方法中有几个参数,表示不同的状态。onTrimMemory()的具体使用,还请大家参加Android的开发文档吧,本人手懒,就不详细介绍啦。
四、检查你所需要使用的内存:
可以通过getMemoryClass()估计一下你的app可用的heap。当你的app所需要的内存超过了这个可用值时,好了内存溢出就出现了。
这里有一个很特殊的方法,可以通过在manifest <application>标签中将largeHeap的属性值设置为true来请求更大的内存,主要注意的是,如果你采用了这种方法,那么当你想要获取可用内存时,就要使用 getLargeMemoryClass()。
不过由于每台机器的RAM是有限的,所以用这个还是小心吧,不需要用的时候还是不用了吧。
五、避免由bitmap引起的内存浪费:
bitmap还是很占内存的啊,当我们使用它的时候一定要小心。有几个需要注意的方法:
1、不要直接使用这样会占用很大的内存,使用BitmapFactory.Options设置inSampleSize,根据手机屏幕大小来设置bitmap的大小, 这样做可以减少对系统资源的要求。
2、缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新加载到内存;
3、采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;
4、最后就是最重要的一点,当bitmap使用完之后一定要记得回收,,,
六、使用优化过的数据容器
尽量使用 SparseArray, SparseBooleanArray, LongSparseArray 等经过优化的容器类。通常来说HashMap的效率时比较低下的。
七、小心使用抽象类(方法)
适当的使用抽象类和方法能够使我们的代码更加灵活、易维护,但是这样会增加app的内存占用。所以,那些无关痛痒的东西,还是别抽象了。
9. 如何优化app的运行内存占用问题
下面的方法可以优化app的运行内存:
1、内存资源紧张时释放内存
在应用生命周期的任何阶段onTrimMemory()回调方法都可以告诉你设备的内存越来越低的情况,
你可以根据该方法推送的内存紧张级别来释放资源.
2、使用优化后的数据容器
利用 Android 框架优化后的数据容器, 比如SparseArray,SparseBooleanArray和LongSparseArray.
传统的 HashMap 在内存上的实现十分的低效因为它需要为 map 中每一项在内存中建立映射关系. 另外,SparseArray类非常高效因为它避免系统中需要自动封箱(autobox)的key。
3、使用保守的Service
如果你的应用需要使用 service 在后台执行业务功能, 除非是一直在进行活动的工作(比如每隔几秒向服务器端请求数据之类)否则不要让它一直保持在后台运行. 并且, 当你的service执行完成但是停止失败时要小心service导致的内存泄露问题.
4、当心抽象代码
通常来说, 使用简单的抽象是一种好的编程习惯, 因为一定程度上的抽象可以提供代码的伸缩性和可维护性. 然而抽象会带来非常显著的开销: 需要执行更多的代码, 需要更长时间和更多的运行内存把代码映射到内存中, 所以如果抽象没有带来显著的效果就尽量避免.
那么如何查看APP运行内存占多少?
手机查看运行内存的方法:
1.部分手机内置内存管理器/智能管理器,开启该应用可查看内存使用情况。
2.部分机器:长按Home键-进入任务管理器-RAM状态-查看即可。
提示:不同型号手机查看路径可能略有不同。