Android:为每个activity加统一操作的两种方法
2019-12-07 本文已影响0人
我爱纽约先生
在Android的实际开发过程中,经常需要针对App里每个Activity进行一些统一的操作,比如打日志,加统计等等。今天给大家介绍两种方法来实现这个小需求。
1.最传统的方法:定义一个统一父类
这种方法大家都比较熟悉了,就是写一个父类,在这个父类的生命周期方法里加上需要的代码,比如:
public class BaseActivity extends AppCompatActivity {
private String TAG = BaseActivity.class.getCanonicalName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate: " + getClass().getCanonicalName());
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart: " + getClass().getCanonicalName());
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: " + getClass().getCanonicalName());
}
}
其他所有的Activity都继承自这个BaseActivity就可以了。
2.另外一种方法,使用ActivityLifecycleCallbacks
继承的方法大家都会,今天给大家介绍一种新方法,更加的简单,同时对业务代码的侵入性更小。
首先,先介绍一个Application里大家不太常用的接口:registerActivityLifecycleCallbacks()
这个接口其实也不用详细说,很简单,大家一看就会。就是在每个Activity执行其生命周期方法的时候都会通知这个回调接口,我们在对应的onActivityXXX()方法里面加上需要的业务逻辑即可。
例子:
public class App extends Application {
private static final String TAG = "App";
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
Log.i(TAG, "onActivityCreated: " + activity.getClass().getCanonicalName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.i(TAG, "onActivityStarted: " + activity.getClass().getCanonicalName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.i(TAG, "onActivityResumed: " + activity.getClass().getCanonicalName());
}
//余下接口省略。。。
});
}
}
相比于第一种方法,这个方法对代码的侵入性更小,也相对更灵活一些。
有一点需要注意,第二种方法里的ActivityLifecycleCallbacks的事件是在Activity的生命周期之前调用的。比如:ActivityLifecycleCallbacks的onActivityCreated()是在对应activity的onCreate()之前调用的。
好了,以上就是今天想分享的内容,希望这个小小的知识点可以帮到你。