簡體   English   中英

Android應用程序從后台更改為前台

[英]Android application changing from background to foreground

我有一個具有設置和身份驗證活動的應用程序A。 每當啟動其他某個應用程序(例如App B)時,都會啟動Authentication活動,因此,如果身份驗證成功,則會顯示App B的啟動器Activity(一種應用程序鎖定保護)。 我有兩種行為在這里解釋,

  1. 當我最小化我的應用程序A時,我將啟動應用程序B。這將觸發應用程序A的身份驗證活動。如果身份驗證成功,那么我將立即使用finish()終止身份驗證活動。 但這將完成Authentication活動,並將先前已最小化的App A的活動放在前面(我不希望發生這種情況),而不是將其帶到新的App中。

  2. 如果應用程序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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM