我实施了一个具有以下功能的Android应用程序:
申请:public class ApplicationGlobalAgent extends Application
包含:
我想在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中扩展了应用程序:
@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());
}
但结果如下:
当没有网络连接时,应用程序成功终止,否则在我关闭另一侧的网络套接字(连接到Android套接字的人)之前,永远不会打印"Terminated!"
。
那么,在使用连接网络套接字退出MainActivity时,如何强制应用程序正确完全终止?
感谢所有帮助!
答案 0 :(得分:3)
@Override public void finish()
您应该改为onDestroy
。
getApplication().onTerminate();
从不直接调用它。
System.gc();
这实际上没有必要。
android.os.Process.killProcess(android.os.Process.myPid());
为什么你自己申请了killProcess
申请?您应该让Android运行时系统为您终止进程。
当
MainActivity
存在连接网络套接字时,如何强制应用程序正确完全终止?
除非您已经分配了在内核杀死Java进程时无法清除的资源,否则您不必担心清理。