![](/img/trans.png)
[英]Android:Retain state of application when launch from background to foreground
[英]Android application changing from background to foreground
我有一個具有設置和身份驗證活動的應用程序A。 每當啟動其他某個應用程序(例如App B)時,都會啟動Authentication活動,因此,如果身份驗證成功,則會顯示App B的啟動器Activity(一種應用程序鎖定保護)。 我有兩種行為在這里解釋,
當我最小化我的應用程序A時,我將啟動應用程序B。這將觸發應用程序A的身份驗證活動。如果身份驗證成功,那么我將立即使用finish()終止身份驗證活動。 但這將完成Authentication活動,並將先前已最小化的App A的活動放在前面(我不希望發生這種情況),而不是將其帶到新的App中。
如果應用程序A根本沒有運行(甚至沒有最小化),則啟動了身份驗證活動,並且在成功身份驗證后,將顯示應用程序B的活動。
有人可以解釋一下為什么這兩種不同的行為被顯示出來。 同樣在情況1中,我也想在成功通過身份驗證后顯示應用2的活動。
我也在尋找類似的東西。 但是我確實找到了一些教學大綱之外的解決方案,例如使用后台服務或使用getTasks方法或使用包管理器之類。
我做的最簡單的解決方案就是這樣。
public class MainApplication extends Application implements Application.ActivityLifecycleCallbacks {
private static boolean background = false;
private static int count = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
if(background){
background = false;
Log.v("activityFocus", "Activity came in foreground ");
Toast.makeText(getApplicationContext(), "Foreground", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onActivityResumed(Activity activity) {
count++;
}
@Override
public void onActivityPaused(Activity activity) {
count--;
}
@Override
public void onActivityStopped(Activity activity) {
if(count==0){
Log.v("activityFocus", "Activity is in background ");
Toast.makeText(getApplicationContext(), "Background", Toast.LENGTH_SHORT).show();
background=true;
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.