依赖倒置- 监听Activity,Fragment的生命周期

引子

每次面试,都被问你会设计模式么,特意去看过《大话设计模式》,《head first 设计模式等书,刚看着挺神奇,看了几个后,在实际项目中总感觉用不上,会造成过度设计,代码臃肿等问题,明明简简单单一个类就能搞定的事,却要建好几个类。所以过了一段时间又忘了,面试官问的时候,我竟然一个答不上来,心里还对面试官一阵鄙视,你咋这么学院风呢。

为什么学习设计模式

很久以前,项目中有个简单的多平台分享功能,随着公司业务的扩大,不停的有新的功能加入,根据调用入口动态切换分享来源,一些业务是否显示,是否通知服务器等,不同入口展示的页面也不一致,所以所有分享的业务代码还分布在不同的页面中,每次的小修改都弄得我胆颤心惊,最近产品又要求所有分享页面都要修改成弹窗形式,还加其他功能,最终意识到不能再这样,把分享的业务逻辑单独抽离了出来,也让我坚定了认真的重新学习设计模式。通俗来说,设计模式能降低编程复杂度,减少bug,便于维护。

为什么要监听Activity,fragment生命周期呢

有的同学可能跟我一样遇到过Dilog 没关闭引起的Window Leaked,或者老版本的Volley异步线程导致的oom,RxJava没有 unRegister,使用了异步线程没有关闭,handler没有移除Runnable等,这些问题都只需要在Activity或者fragment Destroy时关闭即可,但是每次写重复的代码,是不是很丑陋,有时还会忘记呢,正好重新看了 Android 源码设计模式解析 这本书,尝试下用设计模式的方法来解决.

依赖倒置原则

(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

/** * Created by Administrator on 2016/7/27. */
public interface Destroyable {  
  void onDestroy();
}
import android.app.Dialog;import android.os.AsyncTask;
import java.util.ArrayList;import java.util.List;
/** * Created by Administrator on 2016/7/27. */
public class DestroyableManager {  
private List destroyableList = new ArrayList<>(); 
   private void add(Destroyable destroyable){   
     destroyableList.add(destroyable);  
  }   
 private void remove(Destroyable destroyable){    
    destroyableList.remove(destroyable); 
   }  
  public void noticeDestroy(){    
    for (Destroyable destroyable : destroyableList) {       
     if(destroyable instanceof Dialog){       
         ((Dialog) destroyable).dismiss();    
        }else if (destroyable instanceof AsyncTask){  
              ((AsyncTask) destroyable).cancel(true);    
        }            //TODO close anything in here     
       destroyable.onDestroy();    
    }        destroyableList.clear();   
     destroyableList = null;  
  }
}
public class BaseActivity extends Activity{  
  DestroyableManager destroyableManager = new DestroyableManager(); 
   @Override 
   protected void onDestroy() {   
     super.onDestroy();     
       destroyableManager.noticeDestroy(); 
   }   
 protected void addDestroyable(Destroyable destroyable){    
    destroyableManager.add(destroyable); 
   }
}

你可能感兴趣的:(依赖倒置- 监听Activity,Fragment的生命周期)