次の機能を備えた Android アプリケーションを実装しました。
アプリケーション:public class ApplicationGlobalAgent extends Application
内容:
- MainActivity: GUI 描画を表示 -> それから他のアクティビティを開始します。
- ネットワーク ServerSocket とクライアント Socket: 二重モードでデータを送受信します。
MainActivity が終了したらアプリケーションを終了したいので、次のようにしました。
MainActivity では、Activity を拡張します。
@Override
public void finish()
{
super.finish();
Log.d(DEBUG_TAG, "finish and call app termination");
//call the application to terminate
getApplication().onTerminate();
}
ApplicationGlobalAgent では、Application を拡張します。
@Override
public void onTerminate()
{
// do close ServerSocket and client Socket in networking threads
mNetworkManager.DoStop();
System.gc();
Log.d(DEBUG_TAG, "Terminated!");
super.onTerminate(); //?? should be placed at the end of functions ??
//totally kill this application process
android.os.Process.killProcess(android.os.Process.myPid());
}
しかし、結果は次のとおりです。
ネットワーク接続がない場合、アプリケーションは正常に終了します。それ以外の場合"Terminated!"
は、反対側 (Android ソケットに接続した人) のネットワーク ソケットを閉じるまで印刷されません。
では、ネットワークソケットを接続してMainActivityを終了するときに、アプリケーションを適切かつ完全に終了させるにはどうすればよいですか?
あなたのすべての助けに感謝します!