![](/img/trans.png)
[英]android app crashes when killing one activity and start another one
[英]Starting another activity when one activity is about to start: Android
我有一個應用程序,每次用戶訪問該應用程序時,我都必須顯示啟動畫面。 那是他重新啟動應用程序還是他放棄應用程序,或者他是否單擊啟動器圖標。
問題是,在啟動屏幕之后,我還想回到他離開應用程序時可見的最后一個活動(以防萬一,這不是一個全新的開始)
為了解決這個問題,我擴展了Application並實現了ActivityLifecycleCallbacks。
因此,當我的應用程序處於免費狀態並返回到前例時,我將從
@Override
public void onActivityStarted(Activity activity) {
//launch splash screen
}
現在,啟動畫面工作完成后,我將其殺死,然后我回到用戶在應用程序進入后台之前最后一次使用該應用程序時的活動。
在這里似乎工作正常,但我不斷收到以下錯誤:
09-14 16:44:46.746: E/ActivityThread(5622): Performing pause of activity that is not resumed: {SignInActivity}
09-14 16:44:46.746: E/ActivityThread(5622): java.lang.RuntimeException: Performing pause of activity that is not resumed: {SignInActivity}
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3015)
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3003)
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2981)
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread.access$1000(ActivityThread.java:135)
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
09-14 16:44:46.746: E/ActivityThread(5622): at android.os.Handler.dispatchMessage(Handler.java:102)
09-14 16:44:46.746: E/ActivityThread(5622): at android.os.Looper.loop(Looper.java:136)
09-14 16:44:46.746: E/ActivityThread(5622): at android.app.ActivityThread.main(ActivityThread.java:5001)
09-14 16:44:46.746: E/ActivityThread(5622): at java.lang.reflect.Method.invokeNative(Native Method)
09-14 16:44:46.746: E/ActivityThread(5622): at java.lang.reflect.Method.invoke(Method.java:515)
09-14 16:44:46.746: E/ActivityThread(5622): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-14 16:44:46.746: E/ActivityThread(5622): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-14 16:44:46.746: E/ActivityThread(5622): at dalvik.system.NativeStart.main(Native Method)
所以我有兩個問題:
謝謝,陽光明媚
進入Oncreate方法中,您可以啟動ActivityForResult
startActivityForResult(intent, activity);
然后按照以下步驟進行活動:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
如果我理解正確,即使在應用程序被完全銷毀/終止后,您也想顯示上一次活動。 您將需要持久的數據來實現我認為的目標。 我以下面的共享首選項為例(尚未測試,但希望您能理解)。
//Inside every activity of your app
@Override
public void onResume(){
super.onResume();
//Store the current activity name inside shared preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("LastActivity", getCurrentActivityName());
editor.commit();
//Show splash screen here every time the app is brought to foreground (aka it resumes)
}
private void openActivityFromName(String name){
Class<?> c = null;
if(name != null) {
try {
c = Class.forName(name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Intent intent = new Intent(this, c);
startActivity(intent);
}
private String getCurrentActivityName(){
this.getClass().getSimpleName()
}
/**
* Inside your main activity (the one that opens first normally)
*/
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String lastActivity = settings.getString("LastActivity", "");
//Open the last opened activity everytime the app opens
openActivityFromName(lastActivity);
}
將您的應用程序置於后台(不關閉它)不會關閉您當前的活動。 因此,僅在應用程序被完全銷毀並再次調用onCreate
時才需要打開最后一個活動的行為。
我有同樣的問題。 我認為您應該只使用onResume方法,最后使用onPause()方法來控制活動狀態。
放置onResume()方法
@Override
protected void onResume()
{
super.onResume();
...//
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.