注册 Android activity 生命周期未被触发

Registering Android activity lifecycle not being triggered

我正在开发 Android 应用程序,我正在尝试注册 activity 生命周期回调。

在我的启动器 activity (Agreement.java) 的 onCreate 方法中,我有以下内容:

this.getApplication().registerActivityLifecycleCallbacks(new LoginManager());

这个 activity 会检查协议是否已达成一致,如果是,则立即完成并调用 LoginActivity.java 但是我在 activity 回调中收到的 toast 通知 class 没有显示,我的 logcat 消息也没有显示,所以它看起来不像是被解雇了。

下面是实现 activity 回调的 LoginManager class

public class LoginManager extends Application implements Application.ActivityLifecycleCallbacks
{
    private final String TAG = "LoginManager";
    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState)
    {
        Toast.makeText(activity, "Activity Created", Toast.LENGTH_LONG).show();
        Log.d(TAG, "Activity Created");
        long currentEpochTime = System.currentTimeMillis() / 1000l;
        Log.d(TAG, "Current Epoch: " + currentEpochTime);
        CommonTasks commonTasks = new CommonTasks(activity);
        SharedPreferences settings = commonTasks.getAppsSharedPreferences();

        long timeDifference = currentEpochTime - settings.getLong(Defines.SharedPreferenceSettings.LAST_ACTIVE_EPOCH, 0);
        Log.d(TAG, "Time Difference: " + timeDifference);
        if (timeDifference >= 120) //2 Minutes
        {
            Log.d(TAG, "Logging out");
            //Over 2 minutes so we need to logout
            Intent intent = new Intent(activity, LoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            activity.startActivity(intent);
        }
        else
        {
            Log.d(TAG, "Not Logging Out");
            //No need to logout, save the current time
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(Defines.SharedPreferenceSettings.LAST_ACTIVE_EPOCH, currentEpochTime);
            editor.commit();
        }
    }

所以重申一下,协议 class 注册生命周期回调 (LoginManager) 立即关闭并显示 LoginActivity 但 toast 和 logcat 未被触发。

您是否在清单中设置了 class 应用程序 class 的名称?像这样:

<application
android:name=".LoginManager"
android:theme="@style/AppTheme">

另外,你为什么不放

registerActivityLifecycleCallbacks(this);

在您的 LoginManager 的 onCreate 方法中?

您注册回调太晚了。 activity 已创建,因此不会调用回调。您是否尝试过在应用程序的 onCreate 期间而不是 Activity 期间注册?您可以定义自己的应用程序 class 并通过将应用程序名称属性指定为您的自定义 class.

在清单中指明这一点

在你的LoginManagerclass中添加

 @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
    }

并删除

this.getApplication().registerActivityLifecycleCallbacks(new LoginManager());

来自 Agreement.java