2011-09-29 3 views
8

アンドロイドのドキュメントを見て、アプリのシャットダウンを知る能力がないようです。ユーザーが明示的に指定したか、オペレーティングシステムによって自動的に指定したか。アンドロイドアプリケーションがいつ終了したかを追跡できますか?

下記はonTerminate() documentationです。これはエミュレートされたシナリオでのみ利用可能です。

public void onTerminate() 

はので:APIレベル1

この方法は、エミュレートされたプロセス 環境で使用するためのものです。これは、生産中のAndroidデバイスでは決して呼び出されません。 プロセスは単純にそれらを削除することで削除されます。このとき、ユーザコード (このコールバックを含む)は実行されません。

ユーザーがアプリケーションを閉じるときに他の方法でレポートする方法はありますか?

将来のプロダクションアプリに追加機能を組み込む必要がある場合は、パイロット/ユーザビリティの観点から知る必要があります。

+0

あなたは、アプリケーションが「終了」されたときに何をしたいのかのいくつかのアイデアを与えることができれば、我々はそれを達成する方法についていくつかのアイデアを提案することができるかもしれませんように。 –

+0

基本的には、内部のインフラストラクチャにFire-forget要求を送信して、状況が発生していることを通知したいと思います。本当に何もありません。この事態の発生頻度を知ることは、今後の当社製品の方向性に影響を与えます。 –

+1

あなたのアプリがシステムやユーザーによって殺されたことを知る特定のAPIはありませんが、あなたのアプリケーションで何が起こるかを部分的に伝えるapiが数多くあります:onDestoryメソッド内でisFinishing()をチェックすると、 finish()や他の理由(例えば、osクリーンアップ)のために閉じられました。また、サービスを使用して、onTaskRemoved()メソッドをリッスンすることで、ユーザーがアプリのタスクを削除したかどうかを追跡できます(例えば、recentsからアクティビティを削除する)。 – MikeL

答えて

5

ない、これはあなたを助けるために起こっているかどうかを確認してください...

私のアプリでは、私は私が必要なクリーンアップを行うにはActivity.onDestroy()を使用しています。私には2つの活動があり、それぞれにonDestroy()があります。

これは私が必要としていたことに最も近いものです。実際にはうまくいきます。

+3

レスポンスを気に入っていますが、このアプローチは望ましくない要求を捕まえるようです。たとえば、アプリがバックグラウンドに置かれ、OSがスペースを探しているときなどです。潜在的に、onDestroy(s)を呼び出す履歴スタック内のアクティビティインスタンスを削除します。他の条件がない場合は、この例で確認していますか? –

+0

私は特別な点検をしません。 onDestroy()では、アクティビティの状態を保存してから、onCreate()でその状態を復元します。これは私のアプリでうまくいきますが、私はあなたのニーズが異なるかもしれないことを感謝します。 –

+0

onDestroyは間違いなく動作します。私は、アプリケーションのスタックからアプリケーションを削除するか、デバイスが法律上のバッテリのためにシャットダウンするような、アプリケーションを終了するイベントを追跡したいと思います。解決策はありますか? –

3

アンドロイドのドキュメントを見て、アプリがシャットダウンするタイミングを知ることができないようです。ユーザーが明示的に指定したか、オペレーティングシステムによって自動的に指定したか。

ユーザーはAndroidでアプリケーションを終了しません。

ユーザーがアプリケーションを終了したときに報告する他の方法はありません。

ユーザーはAndroidでアプリケーションを終了しません。

Androidは、この点でウェブブラウザとよく似た動作をします。ユーザーはWebブラウザーでWebアプリケーションを閉じません。ブラウザを閉じる可能性があります。タブを閉じる可能性があります。ホームボタンを押して別のサイト/アプリに移動することがあります。彼らはブックマークを選択し、別のサイト/アプリにナビゲートするかもしれません。ドキュメントをブラウザにドラッグして表示する可能性があります。デスクトップアイコンをダブルクリックして表示することがあります。また、現在閲覧しているWebサイト/アプリの「ログアウト」リンクをクリックすることもあります。いずれにせよ、ユーザは自分のWebサイト/アプリケーションをそのまま残すが、デスクトップOSウィンドウの閉じるボタンをクリックするのと同じ方法でWebサイト/アプリケーションを「閉じる」と解釈されるものではないデスクトップアプリケーションを「閉じる」。

@Aleks Gノートには、アクティビティに関してユーザーが何をしているかを調べるために上書きできるさまざまなライフサイクルメソッドがあります。 onStop()は、フォアグラウンド入力を引き継ぎ、現在のアクティビティが表示されなくなったことを示します。 onUserLeaveHint()は、ユーザーがHOMEを押したことを示します。等々。しかし、それらはアプリケーションレベルではなく、アクティビティレベルにあります。

+3

タスクマネージャーアプリケーションを使用してアプリケーションを終了すると、ユーザーがアプリケーションを閉じるシナリオになります。 –

+2

@DevanDanger:ユーザーがタスクマネージャーを使用してアプリを強制終了したときや、ユーザーが[設定]の[サービスの管理]画面でアプリケーションを強制終了したときに通知されません。 – CommonsWare

+6

正しい。 「ユーザーがタスクマネージャーを使用してアプリを殺す」と「ユーザーがアプリケーションを閉じる」ということです。それは、とにかく私たちはそれが起こっていることを追跡できるかどうか疑問に思っていた。間違った方向を教えてくれて申し訳ありません。 –

0

アプリケーションでBaseActivity拡張アクティビティを作成し、アクティビティではなくこのBaseActivityを拡張します。 このBaseActivityでは、onDestroy()メソッドをオーバーライドします。

@Override 
protected void onDestroy() { 
     super.onDestroy(); 
    //Write the code that you want to do if the application terminates 
} 
関連する問題