[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-19 标题Android应用开发笔记Handler弱引用分类编程 / android 标签android·handlerAndroid应用开发笔记Handler弱引用新版 Android SDK 在使用 Handler 内部类时会出现如下警告This Handler class should be static or leaks might occur.原因是消息队列中排队的消息会持有目标 Handler 的引用若 Handler 是非静态内部类则会同时持有外部类如 Activity的引用导致 Activity 无法被 GC 回收从而内存泄漏。解决方案将 Handler 声明为static嵌套类并通过WeakReference持有外部类引用。publicclassMainActivityextendsActivity{privateMainActHandlerhandlernewMainActHandler(this);OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}privatestaticclassMainActHandlerextendsHandler{privateWeakReferenceMainActivityactivity;publicMainActHandler(MainActivityact){super();this.activitynewWeakReference(act);}OverridepublicvoidhandleMessage(Messagemsg){MainActivityactactivity.get();if(nullact)return;switch(msg.what){// 处理消息}}}}
【2013-10-19】Android应用开发笔记:Handler弱引用
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-19 标题Android应用开发笔记Handler弱引用分类编程 / android 标签android·handlerAndroid应用开发笔记Handler弱引用新版 Android SDK 在使用 Handler 内部类时会出现如下警告This Handler class should be static or leaks might occur.原因是消息队列中排队的消息会持有目标 Handler 的引用若 Handler 是非静态内部类则会同时持有外部类如 Activity的引用导致 Activity 无法被 GC 回收从而内存泄漏。解决方案将 Handler 声明为static嵌套类并通过WeakReference持有外部类引用。publicclassMainActivityextendsActivity{privateMainActHandlerhandlernewMainActHandler(this);OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}privatestaticclassMainActHandlerextendsHandler{privateWeakReferenceMainActivityactivity;publicMainActHandler(MainActivityact){super();this.activitynewWeakReference(act);}OverridepublicvoidhandleMessage(Messagemsg){MainActivityactactivity.get();if(nullact)return;switch(msg.what){// 处理消息}}}}