2016-08-24 14 views
1

アンドロイドアプリケーションで奇妙な問題に直面しています。私が活動を終わらせたり、近くのアプリケーションを強制したりするたびに、それは再開されました。ここ主な活動が終了するとアンドロイドの再起動が発生する

はどのアプリケーションフローである:

アプリケーションが活性であり、コンテンツを断片に示す主な活動に行くスプラッシュ画面が開きます。今私がバックプレスで主な活動を終えると、アプリケーションは終了する代わりに再起動しました。

私はMainActivity

このような
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 

を始めているとMainActivityに私はこの

MainActivity.this.finish(); 

し、解決する方法この

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

のようなアプリケーションを終了するようにそれを終えていますこの問題?アプリを閉じることonBackPressedを実装する場所

おかげ

+0

郵便あなたのコード多分、この方法のようにMainActivityを開始することです。 – earthw0rmjim

+2

あなたの主な活動を開始するときにあなたはspalsh画面を終了する必要があります。 私はあなたのスプラッシュ画面を終了していない問題だと思う。 – Prashant

+0

なぜこの問題に答えるのではなく投票するのですか?質問を理解していない人は、投票を停止するのではなく、明確化を求めてください。 – Geek

答えて

0

あなたは、あなたがこのような何かを行うことができ、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); 

としてフラグをMainActivityを開始する必要があります

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()を、開始した後。ここで

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
MainActivity.this.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

バディあなたのコード内で他に何もする必要はありません。 MainActivityを開き、開いたらすぐ次の行で閉じます。

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

コードのこの作品は、SplashActivityとMainActivityがアクティブのままである、あなたの現在の活動を終了します。がんばろう。

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

プロセスをkillする必要はありません。

+0

'SplashActivity':' MainActivity.this.finish(); ' にこの行を書き込んでいない可能性があります。 – Prashant

+0

いいえ!これには何も問題はありません。このコードはMainActivity.this.finish();うまく動作します。これはアクティビティを閉じる別の方法ですが、コードの配置は間違っています。 –

1

はこれをしないでください。Androidはこれをやりたいときにこれを行います。これは、あなたのアプリが再起動している理由です。 Androidはクラッシュしたと判断し、ユーザー用に再起動します。

+1

ありがとうございます、あなたは絶対に正しいです。アプリケーションがクラッシュしたと仮定してプロセスを終了すると、Androidはアプリケーションを再起動します。 – Geek

0

@MukeshJha問題は、そう、それはあなたがMainActivityを始めたとき、停止状態でスタックに残ったし、その後、あなたのMainActivityを終えているので、それが停止状態から、前SplashActivityを再起動するように導き、あなたの最初の活動を終えていないこと、すなわちSplashActivityです。

もう一度再起動しないようにするには、新しいアクティビティを開始するたびに終了する必要があります。SplashActivity

ソリューションは

Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); 
startActivity(mainIntent); 
finish(); // this will cause to finish SplashActivity. 
関連する問題