java - 我怎样才能在应用程序关闭之前做些什么?

标签 java android tcp ondestroy application-close

<分区>

我在 android 中制作了一个应用程序,其中有一个 TCP 客户端 但现在我想向服务器发送消息仅当应用程序将要关闭时,我试图在 onDestroy 方法,但无效。 我使用的 TCP 客户端在这个 guide 中,实际上我需要发送此消息以告知服务器已关闭与设备的通信并发送消息“设备处于离线状态”,然后关闭应用程序。

最佳答案

方法 1:您可以使用 ActivityLifecycleCallbacks 来实现此目的。下面是一个带有一些日志的示例。

public class MyApplication extends Application {

    private static final String TAG = MyApplication.class.getSimpleName();
    private int mVisibleCount;
    private boolean mInBackground;

    @Override public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            }

            @Override public void onActivityStarted(Activity activity) {
                mVisibleCount++;
                if (mInBackground && mVisibleCount > 0) {
                    mInBackground = false;
                    Log.i(TAG, "App in foreground");
                }
            }

            @Override public void onActivityResumed(Activity activity) {
            }

            @Override public void onActivityPaused(Activity activity) {
            }

            @Override public void onActivityStopped(Activity activity) {
                mVisibleCount--;
                if (mVisibleCount == 0) {
                    if (activity.isFinishing()) {
                        Log.i(TAG, "App is finishing");
                    } else {
                        mInBackground = true;
                        Log.i(TAG, "App in background");
                    }
                }
            }

            @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override public void onActivityDestroyed(Activity activity) {
            }
        });
    }

    public boolean isAppInBackground() {
        return mInBackground;
    }

    public boolean isAppVisible() {
        return mVisibleCount > 0;
    }

    public int getVisibleCount() {
        return mVisibleCount;
    }
}

方法二:还有一种方法是使用Service来检测应用程序是否终止。参见 link

关于java - 我怎样才能在应用程序关闭之前做些什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182633/

相关文章:

c - lwIP echo 服务器发送数据时出错

java - 套接字异常 : Connection Reset when trying to read from socket in Java?

java - 如何在java中检查POST端点/url的状态

Java URL 类 getPath()、getQuery() 和 getFile() 与 RFC3986 URI 语法不一致

java - J2ME 应用程序崩溃

java - Wicket - 异常处理后正确清理页面组件

sockets - 第一次响应后 TCP 服务器失败

android - 如何使用 Robolectric 测试 Application 类?

通过C程序进行Android串口通信

android - 如何在google play控制台正确填写权限声明表?