2012-01-09 15 views
2

メインアクティビティーがロードされると、リモートデータベース行を更新することによって、ログされたユーザーの状態をオンラインとして設定できます。ユーザーがアプリを終了する場合は、ユーザーの状態をオフラインに設定する必要があります。主なアクティビティーがスタックから削除されました - オフセットとしてオフに設定されました。

私はonDestroy()メソッドを持っており、そこに私はオフラインとしてユーザーの状態を設定することができますが、私はホームボタンを使用して終了し、設定からアプリケーションを殺すならばonDistroy()isn 'と呼ばれる。

メインアクティビティがスタックになっていないことを知る方法はありますか?そのため、ユーザーの状態を更新できますか?

+0

このスレッドはあなたに役立ちます。必要に応じて、AFAIK dalvikがあなたのアプリを閉鎖します。ここでは、これに関するダイカッションとのSOのリンクです。 http://stackoverflow.com/questions/5279292/application-close-event-in-android – kosa

答えて

1

で仕上げされている場合、あなたはそれがチェックかもしれない。また

@Override 
protected void onPause() 

super.onPause(); 




} 

してみてくださいアクティビティはまだアクティビティスタック上にあり、バックボタンと同様に、通常は削除されます。 ActivityManagerがスタックからアクティビティを削除することを決定した場合、通常は一定の時間が経過するかリソースが必要な場合は、onDestoryが呼び出され、フィールドがリセットされます。

すべての情報がわからないので、私は確かに言うことはできませんが、あなたが家を押すと(coder_For_Life22によって提案されたようにonStartに)ログインしている状態のユーザーを削除すると、おそらく不必要にユーザーが再びログインしなければならないアクティビティに戻り、クライアント側のセッション管理がさらに複雑になります。

セッション管理の方法は、サーバー側のセッション管理のようなものがない限り、とにかく疑わしいと思われます。たとえば、セッションがアクティブでない場合、データベースフィールドはリセットされます。

UPDATE

私はそれがActivityManager.getRunningTasks()またはActivityManager.getRunningAppProcesses()を使用して、アプリがそれらの間にあるかどうかをチェックされることができるかもしれないと考えることができる唯一の方法。提案したようにあなたのアプリを殺すと、あなたのアプリはそれらの中にいないので、あなたは知っている。別のバックグラウンドサービスを実行する必要がある場合(可能であれば、getSystemService(ACTIVITY_SERVICE)を呼び出してActivityManagerを取得する必要がある)、非常に複雑な解決策のように思えます。適切な処置を実行してください。

このようにアプリを終了させると、アクティビティのライフサイクルが無視され、シャットダウンを実行できるアクティビティが発生しなくなります。

サーバ側の非アクティブをチェックしてこのようにフィールドをリセットすると、人々は頻繁にこのようなアプリを殺すことはなく、誰かにすぐに電話を渡す可能性は低いようですそれ以外の人は悪意のある情報にアクセスすることができます。

データにこのようなセキュリティが必要な場合は、セキュリティモデルを再考する必要があります。

+0

私は、アプリケーションが閉じている場合にのみ、ユーザーをオフラインにしたいと思っています。ユーザーがホームボタンを押して強制的に設定からアプリケーションを閉じると、これはユーザーをオフラインにしたいと思うシナリオで、これを取得する方法はわかりません。 – dorin

2

onStopは、ユーザーが戻るボタンまたはホームボタンをクリックするとトリガーされます。したがって、onStopでイベントを処理してください。

public void onStop() { 
//do your stuff here 
super.onStop() 
} 

EDIT:

またアプリはホームボタンのようにonDestroyを呼び出すことはありません

if (this.isFinishing()){ 
    //Insert your finishing code here 

} 
+0

しかし、あなたがメインアクティビティから別のアクティビティ(メイン画面ではない)に行くと、onStopが呼び出されます。ユーザーはまだオンラインです。 – dorin

+0

私の編集をチェックしてください –

+0

どこからisFinishing()を呼びますか? – zode64

関連する問題