2

我实现了一个具有以下功能的 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());
}

但结果是:

当没有网络连接时,应用程序成功终止,否则"Terminated!"永远不会打印,直到我关闭另一端的网络套接字(连接到 Android 套接字)。

那么,当退出 MainActivity 并连接网络套接字时,如何强制应用程序正确和完全终止?

感谢您的所有帮助!

4

1 回答 1

3

@Override public void finish()

你应该重写onDestroy

getApplication().onTerminate();

永远不要直接调用它。

System.gc();

这真的没有必要。

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

你为什么要自己调用应用程序killProcess?您应该让 Android 运行时系统为您杀死进程。

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

除非您分配了在 Java 进程被内核杀死时不会被清理的资源,否则您无需担心清理工作。

于 2012-08-10T03:04:11.000 回答