1. 程式人生 > >Android 在Application中跳轉到Activity的異常處理

Android 在Application中跳轉到Activity的異常處理

專案需求:在Application中判斷使用者是否登入,如果登入則跳轉到主頁,如果未登入則跳轉到登入頁面。

一般通過Intent跳轉到Activity的方法:

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);

在Application中通過以上方式跳轉到Activity的話,會出現異常:原因是原有的任務棧已經銷燬,因此要判斷啟動的activity是不是被銷燬了。

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

解決方法:為activity開啟新的棧,Intent.FLAG_ACTIVITY_NEW_TASK 設定狀態,首先查詢是否存在和被啟動的Activity具有相同的任務棧,如果有則直接把這個棧整體移到前臺,並保持棧中的狀態不變,既棧中的activity順序不變,如果沒有,則新建一個棧來存放被啟動的Activity。

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);