参见:http://blog.chinaunix.net/space.php?uid=20787846&do=blog&cuid=2289102

http://winuxxan.blog.51cto.com/2779763/512179

有些人喜欢用Android提供的AsyncTask,但事实上AsyncTask的问题更加严重,Thread只有在run函数不结束时才出现这种内存泄露问题,然而AsyncTask内部的实现机制是运用了ThreadPoolExcutor,该类产生的Thread对象的生命周期是不确定的,是应用程序无法控制的,因此如果AsyncTask作为Activity的内部类,就更容易出现内存泄露的问题。

这种线程导致的内存泄露问题应该如何解决呢?

第一、将线程的内部类,改为静态内部类。

第二、在线程内部采用弱引用保存Context引用。

解决的模型如下:

        
  1. publicabstractclassWeakAsyncTask<Params,Progress,Result,WeakTarget>extends
  2. AsyncTask<Params,Progress,Result>{
  3. protectedWeakReference<WeakTarget>mTarget;
  4. publicWeakAsyncTask(WeakTargettarget){
  5. mTarget=newWeakReference<WeakTarget>(target);
  6. }
  7. /**{@inheritDoc}*/
  8. @Override
  9. protectedfinalvoidonPreExecute(){
  10. finalWeakTargettarget=mTarget.get();
  11. if(target!=null){
  12. this.onPreExecute(target);
  13. }
  14. }
  15. /**{@inheritDoc}*/
  16. @Override
  17. protectedfinalResultdoInBackground(Params...params){
  18. finalWeakTargettarget=mTarget.get();
  19. if(target!=null){
  20. returnthis.doInBackground(target,params);
  21. }else{
  22. returnnull;
  23. }
  24. }
  25. /**{@inheritDoc}*/
  26. @Override
  27. protectedfinalvoidonPostExecute(Resultresult){
  28. finalWeakTargettarget=mTarget.get();
  29. if(target!=null){
  30. this.onPostExecute(target,result);
  31. }
  32. }
  33. protectedvoidonPreExecute(WeakTargettarget){
  34. //Nodefaultaction
  35. }
  36. protectedabstractResultdoInBackground(WeakTargettarget,Params...params);
  37. protectedvoidonPostExecute(WeakTargettarget,Resultresult){
  38. //Nodefaultaction
  39. }
  40. }


更多相关文章

  1. Android中工作线程与主线程同步方式
  2. Android(安卓)关闭线程(转)
  3. Android中当前时间的动态显示
  4. android 获取camera状态?
  5. RxAndroid入门-传智播客
  6. Java(Android)线程池
  7. Android(安卓)多线程2
  8. Android、Java单例看这里(常用的单例模式对比)
  9. android 网络异步加载数据进度条

随机推荐

  1. android开机自启动apk
  2. [Android]笔记7-RelativeLayout布局
  3. Android沉浸式状态栏
  4. Android的四种基本布局
  5. 由Android(安卓)65K方法数限制引发的思考
  6. Android studio 打不开官方虚拟机 100%成
  7. Android中 ScrollView(ListView)中嵌套List
  8. Android之toolbar的使用
  9. Android线程池
  10. Android学习-RecyclerView默认scrollbar