下面列出了android.app.Application#ActivityLifecycleCallbacks ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void addLifecycleCallbacks()
{
if( getApplicationContext() instanceof Application )
{
final Application application = (Application) getApplicationContext();
final Application.ActivityLifecycleCallbacks callbacks = newLifecycleCallbacks();
application.registerActivityLifecycleCallbacks(callbacks);
}
else
{
//--- DRK > Not sure if this is practically possible but nothing we can do here I suppose.
}
}
/**
* 取消插件Application里的ActivityLifeCycle监听
*/
public static void unregisterActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
synchronized (sActivityLifecycleCallbacks) {
sActivityLifecycleCallbacks.remove(callback);
}
// 对于已经运行的插件,需要从其Application类中反注册
for (Map.Entry<String, PluginLoadedApk> entry : sPluginsMap.entrySet()) {
PluginLoadedApk loadedApk = entry.getValue();
if (loadedApk != null && loadedApk.getPluginApplication() != null) {
Application application = loadedApk.getPluginApplication();
application.unregisterActivityLifecycleCallbacks(callback);
}
}
}
private void registerActivityLifeCycle() {
if (activityLifecycleCallbacks != null) application.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);
activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
liveActivityOrNull = activity;
}
@Override public void onActivityStarted(Activity activity) {}
@Override public void onActivityResumed(Activity activity) {
liveActivityOrNull = activity;
}
@Override public void onActivityPaused(Activity activity) {
liveActivityOrNull = null;
}
@Override public void onActivityStopped(Activity activity) {}
@Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override public void onActivityDestroyed(Activity activity) {}
};
application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
lifecycles.add(new ActivityLifecycleCallbacksImpl());
}
public static void register(@NonNull Context context,
@NonNull Application.ActivityLifecycleCallbacks listener) {
ContextHelper.asApplication(context).registerActivityLifecycleCallbacks(listener);
}
private void clearCallbacks() {
for (Application.ActivityLifecycleCallbacks callback : registeredCallbacks) {
application.unregisterActivityLifecycleCallbacks(callback);
}
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
//向Activity的生命周期中注入一些自定义逻辑
lifecycles.add(new MyActivityLifecycle());
}
/**
*
* @param application
* @param width 设计稿宽度
*/
public DensityHelper(Application application, float width){
mApplication = application;
designWidth = width;
activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//通常情况下application与activity得到的resource虽然不是一个实例,但是displayMetrics是同一个实例,只需调用一次即可
//为了面对一些不可预计的情况以及向上兼容,分别调用一次较为保险
resetDensity(mApplication, designWidth);
resetDensity(activity, designWidth);
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
lifecycles.add(new ActivityLifecycleCallbacksImpl());
}
@Override
public void injectActivityLifecycle(@NonNull Context context, @NonNull List<Application.ActivityLifecycleCallbacks> lifecycles) {
//ActivityLifecycleCallbacks 中的所有方法都会在 Activity (包括三方库) 的对应生命周期中被调用, 所以在对应的方法中可以扩展一些自己需要的逻辑
//可以根据不同的逻辑添加多个实现类
lifecycles.add(new ActivityLifecycleCallbacksImpl());
}
/**
*
* @param application application
* @param width 设计稿宽度
*/
public RudenessScreenHelper(Application application, float width){
mApplication = application;
designWidth = width;
activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//通常情况下application与activity得到的resource虽然不是一个实例,但是displayMetrics是同一个实例,只需调用一次即可
//为了面对一些不可预计的情况以及向上兼容,分别调用一次较为保险
resetDensity(mApplication, designWidth);
resetDensity(activity, designWidth);
}
@Override
public void onActivityStarted(Activity activity) {
resetDensity(mApplication, designWidth);
resetDensity(activity, designWidth);
}
@Override
public void onActivityResumed(Activity activity) {
resetDensity(mApplication, designWidth);
resetDensity(activity, designWidth);
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
}
@Binds
@Named("ActivityLifecycle")
abstract Application.ActivityLifecycleCallbacks bindActivityLifecycle(ActivityLifecycle activityLifecycle);
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
lifecycles.add(new ActivityLifecycleCallbacksImpl());
}
public Application.ActivityLifecycleCallbacks getLifeCycleCallBack(){
return mLifeStatus;
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
}
/**
* `
* Activity 全局生命周期回调
*
* @return
*/
Application.ActivityLifecycleCallbacks getActivityLifecycleCallbacks();
/**
* 使用 {@link Application.ActivityLifecycleCallbacks} 在 Activity 的生命周期中注入一些操作
*
* @param context: Context
* @param lifecycles: List<Application.ActivityLifecycleCallbacks>
*/
void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles);
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
}
@Override
public void injectActivityLifecycle(Context context, List<Application.ActivityLifecycleCallbacks> lifecycles) {
}