Android 对所有活动使用唯一的 onDestroy

Android use unique onDestroy for all activities

我有一个包含多个活动的应用程序,无论 Activity 当时是什么(删除一些数据并执行 HTTP 调用),销毁时执行的操作实际上是相同的。
有没有办法让所有活动共享 onDestroy 方法?

另一种解决方案是在其他一些静态 class 中分解一个方法,并让每个 Activity 在销毁期间调用它,但类似特征的行为实际上会更好。

使用单例 class 并创建静态方法,在其中执行您想要执行的操作,并在 onDestroy 中调用此方法。

创建一个抽象的 BaseActivity,重写 onDestroy,而您的所有其他活动应该只扩展 BaseActivity?

如果您描述的是经典的 OOP 特征,为什么要选择单例、静态、工厂等? :)

最简单的方法是创建应用程序 class 并注册生命周期回调。

public class MyApp extends Application {
    @Override
    public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

        }

        @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) {

            //Perform common action here
        }
    });
  }
}

在清单中添加应用程序 class。

<application
    android:allowBackup="true"
    android:name=".MyApp"
    android:icon="@mipmap/ic_launcher"

根据您的描述,我了解到您需要一个通用的 onDestroy() 方法,该方法将在调用 onDestroy() 时由所有活动调用。

代码如下:

package com.demo.application;

import android.app.Activity;
import android.app.Application;
import android.content.pm.ActivityInfo;
import android.os.Bundle;

public class AppGlobal extends Application {


    @Override
    public void onCreate() {
        super.onCreate();

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            @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) {

            }
        });

    } //End of onCreate
}

您需要在 manifest.xml 文件的应用程序标签内添加一个 属性: android:name="com.demo.application.AppGlobal"

试着让我知道你的经验。