Android App 基础性能优化

1# 性能优化


最近被安排解决开始菜单启动慢,有些经验这里做一个笔记

1. 首先从进程入手,分析进程是否被杀死。

如果被杀死,解决方案:

Android service后台服务进程的守护:
AndroidManifest.xml

+        <receiver android:name=".KeepReceiver">
+            <intent-filter>
+                <action android:name=
+              "android.intent.action.BOOT_COMPLETED" />
+            </intent-filter>
+        </receiver>
+
+        <service android:name=".KeepService" />
+public class KeepReceiver extends BroadcastReceiver{
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Intent in = new Intent(context, KeepService.class);
+        context.startService(in);
+    }
+}
+public class KeepService extends Service{
+
 1.    @Override
 2.    public IBinder onBind(Intent intent) {
 3.        return null;
 4.    }
 5.  6.    @Override
 6.    public int onStartCommand(Intent intent, int flags, int startId) {
 7.        return START_STICKY;
 8.    }
+}
作用: 当进程被杀死后,启动服务,启动进程;

注意:android.intent.action.BOOT_COMPLETED 系统中定义的


2. 充分利用Android Studio分析代码, 优化内存。

  1. Android Monitor中查看Memory的使用情况:
  2. 测试Demo: MemoryLeak_Demo
    • 当退出再进入, Memory 使用量没有重新开始累积, 表示 – > 存在内存泄漏;
  3. 解决: 方案

3. 代码分析

列表内容

  • Handler – 有时候使用内存对象在需要销毁的时候这个对象因为被其他对象引用而无法销毁,那么这时候这个对象就属于内存泄露了!
  • 错误写法
Handler handler = new Handler() {  

        @Override  
        public void handleMessage(Message msg) {  
            dosomething();  

        }  
    }; 
  • 解释: 定义的handler对象其实是一个内部匿名了, 它会隐式的持有外部类的引用. 假设: 隐式持有外部activity的引用, 当销毁activity后, GC不会收回引用, 造成内存泄漏;


  • 正确的写法:

static Handler handler = new Handler() {  

        @Override  
        public void handleMessage(Message msg) {  
            dosomething();  

        }  
    };  
  • 解释: 这样静态的handler 不可以持有外部引用. 则不会出现泄漏;

  • 注意: 关闭cursor , 数据库, I/O 流, 广播解除注册: (这些都是很熟悉的,就不写demo);

  • 写代码时: 注意引用: 强 软 弱 虚 这里写的比较清楚

  • 优化讲解:不错的文章

  • 这里个人只是做一个笔记记录, 很多都是没有过多研究的知识, 后期会拿更多实例来说明 or 更正;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值