注册 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.
在清单中指明这一点
在你的LoginManager
class中添加
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
并删除
this.getApplication().registerActivityLifecycleCallbacks(new LoginManager());
来自 Agreement.java
我正在开发 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.
在清单中指明这一点在你的LoginManager
class中添加
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
并删除
this.getApplication().registerActivityLifecycleCallbacks(new LoginManager());
来自 Agreement.java