2016-08-24 104 views
1

我在android應用程序中遇到了奇怪的問題。每當我完成活動,甚至強制關閉應用程序,它都會重新啓動。完成主要活動導致Android應用程序重新啓動

這裏是應用程序的流程:

應用與閃屏這是一個活動,然後進入其中一個片段顯示的內容主要活動打開。現在,當我完成主要活動後,按應用程序重新啓動而不是關閉。這樣

android.os.Process.killProcess(android.os.Process.myPid()); 
System.exit(0); 

我開始MainActivity這樣

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

MainActivity我很喜歡這個

MainActivity.this.finish(); 

完成它和退出應用程序如何解決這個問題?

感謝

+0

發佈您的代碼可能。 – earthw0rmjim

+2

當你開始你的主要活動時,你需要完成你的spalsh屏幕。 我認爲問題是你沒有完成你的啓動畫面。 – Prashant

+0

爲什麼要投票而不是回答問題。那些不明白問題的人請求澄清而不是投票。 – Geek

回答

0

你應該用旗幟在MainActivity開始MainActivity作爲

Intent launchNextActivity; 
launchNextActivity = new Intent(B.class, A.class); 
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);     
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
startActivity(launchNextActivity); 

現在要實現onBackPressed關閉應用程序,你可以做這樣的事情,

private Boolean exit = false; 
@Override 
    public void onBackPressed() { 
     if (exit) { 
      finish(); // finish activity 
     } else { 
      Toast.makeText(this, "Press Back again to Exit.", 
        Toast.LENGTH_SHORT).show(); 
      exit = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        exit = false; 
       } 
      }, 3 * 1000); 

     } 

} 

現在,當你按下返回按鈕時,它會給予「按下退出增益退出」,如果用戶在3秒內按下後退按鈕,應用程序將退出

0

你可以發表一些代碼?我發佈這個代碼可能會對你有幫助。

你的主要活動。

@Override 
    public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
    } 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      onBackPressed(); 
      finish(); 
      break; 

    } 
    return (super.onOptionsItemSelected(item)); 
} 
+0

爲什麼你會重寫'onBackPressed()'並調用'finish()'?你有什麼想法:'onBackPressed()'的默認實現是什麼?它調用'finish()'! –

1

在啓動MainActivity電話finish(),這將解決您的問題。

SplashActivity.java

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
finish(); 

你不需要做任何事情都要在MainActivity

+0

爲什麼你會重寫'onBackPressed()'並調用'finish()'?你有什麼想法:'onBackPressed()'的默認實現是什麼?它調用'finish()'! –

+0

@DavidWasser我的錯誤 – Prashant

+0

@DavidWasser你是對的。 – Geek

0

好友你的代碼是

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
MainActivity.this.finish(); 

這裏有什麼錯你的代碼,你是第一個打開MainActivity,一旦打開它,你將在下一行中關閉它。

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
finish(); // or write this as SplashActivity.this.finish(); 

這段代碼將完成您當前的活動,即SplashActivity,MainActivity將保持活動狀態。祝你好運。

+0

他可能不會在'SplashActivity'中寫下這行代碼:'MainActivity.this.finish();' 如果他真的這樣做了,那麼IDE肯定會給他編譯時間的錯誤。 – Prashant

+0

不!這沒有什麼錯。此代碼MainActivity.this.finish();將運行良好。這只是關閉活動的另一種方式,但是他的代碼位置是錯誤的。 –

1

不要這樣做:

android.os.Process.killProcess(android.os.Process.myPid()); 
System.exit(0); 

沒有必要殺死進程。Android會在需要時執行此操作。這是您的應用程序重新啓動的原因。 Android認爲它崩潰了,並且正在爲用戶重新啓動它。

+1

謝謝,你絕對正確。當我們終止進程時,Android會重新啓動應用程序,因爲它假定應用程序崩潰。 – Geek

0

@MukeshJha的問題是,你沒有完成你的第一個活動,即SplashActivity所以這是留在堆棧停機狀態下,當你開始MainActivity,然後你完成你的MainActivity,這樣導致從停止狀態重新啓動以前SplashActivity

爲了避免再次重啓SplashActivity您需要在您開始新活動時完成。

的解決辦法是啓動MainActivity像這樣,

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
finish(); // this will cause to finish SplashActivity. 
相關問題