如何使用实时套接字正确终止Android应用程序

时间:2012-08-10 02:52:30

标签: android multithreading sockets terminate

我实施了一个具有以下功能的Android应用程序:

申请:public class ApplicationGlobalAgent extends Application包含:

  • a 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中扩展了应用程序:

@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时,如何强制应用程序正确完全终止

感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

  

@Override public void finish()

您应该改为onDestroy

  

getApplication().onTerminate();

从不直接调用它。

  

System.gc();

这实际上没有必要。

  

android.os.Process.killProcess(android.os.Process.myPid());

为什么你自己申请了killProcess申请?您应该让Android运行时系统为您终止进程。

  

MainActivity存在连接网络套接字时,如何强制应用程序正确完全终止?

除非您已经分配了在内核杀死Java进程时无法清除的资源,否则您不必担心清理。