2016-10-12 2 views
0

このメソッドはMainactivity.classにあります。私は、アプリケーションが活動が破棄されたときに自動的に呼び出されますMainActivity.classからアプリケーションを破棄するインテントサービスを開始する方法

@Override 
    protected void onDestroy() { 

     if (singleQuestion.size() > 0) { 
      LastQuestionService.answerLastQuestion(context, singleQuestion.get(0)); 
     } 

     super.onDestroy(); 

     MyLog.e(TAG, "onDestroy"); 
} 
+0

アクティビティが破棄されたときに自動的に呼び出されます。 – Shane

+0

あなたの場合、インテントサービスの代わりにサービスを使用 –

+0

ログを使用してチェックしたときにアクティビティが破棄されたときに常に呼び出されるわけではありません。 –

答えて

0

を破棄するとき、このメソッドが呼ばれるようにしたいです。例えば、戻るボタンを押すと、アクティビティが破棄され、onDestroy()メソッドが呼び出されます。しかし、あなたがHome、Menuボタンを押すと、onDestory()メソッドは呼び出されず、onPause()メソッドが呼び出されます。 これをチェックするには、OnUserLeaveHint()をオーバーライドします。その場合は、それが呼び出されます。

+0

HOMEボタンを押してアプリケーションをバックグラウンドで実行すると、 –

+0

onDestroy()メソッドがアクティビティから常に呼び出されるわけではないので、アプリケーション破棄ではなくサービスを破棄するサービスを開始したい –

+0

ユーザーが強制的にアプリケーションを終了させると、あなたのアプリケーションがそこに通知されるとは思わないプロセス全体が強制終了されるため、コールバックは発生しません。 –

0

代わりにfinish()に入れてみてください。最終的にはonPause()>onStop()となり、それに続くのはonDestroy()です。 finish()を使用すると、アクティビティが強制終了され、メモリが解放されるため、アプリケーションを閉じるために戻るボタンを押したと思われるので、アプリケーションが強制終了されると効果的に言えるはずです。

finish()は、複数の理由によりonDestroy()を呼び出す必要はないことに注意してください。詳細を読むためにこれをお読みくださいAndroid: Will finish() ALWAYS call onDestroy()?

+0

ユーザーがバックグラウンドで実行中のアプリケーションを強制終了すると、データを保存するために自分のアクティビティからサービスを呼び出したい –

+0

それはできません –

+0

これは不可能です。私が言及したように、ユーザーがアプリケーションを強制終了したときにあなたのアプリにコールバックはありません。 –

0

この問題は、エネルギーを消費する問題とcontextの両方の値に関する問題です。 解決策:

  1. singleQuestion.size() > 0は偽ですか? :)
  2. contextの代わりにgetApplicationContext()またはgetBaseContext()のいずれかを使用します。
  3. コール、独自のサービスを起動しWakefulBroadcastReceiverurlにブロードキャストイベント
  4. 使用startForeground殺されるためにあなたのプロセスを防ぐために、あなたのService内部通知。 url
+0

1)リストのサイズは0ではありません 2)私はContext context = MainActivityとして開始したので、私のコンテキストはnullではありません。そのアクティビティのクラス –

+0

ユーザーがバックグラウンドで実行されているアプリケーションを強制終了すると、データを保存するために自分のアクティビティからサービスを呼び出したい –

+0

'onDestroy()'の後に実行中にnullになることがあります。そして、 'Context context = MainActivity.class'の代わりに' getContext() 'を使用してください。 – Vyacheslav

関連する問題