2

我在 android 中制作了一个应用程序,其中我有一个TCP 客户端,但现在我想仅在应用程序将要关闭时向服务器发送消息,我试图添加openConnection(打开与 TCP 客户端的连接)和 sendMessage(向 TCP 服务器发送消息)onDestroy方法中的操作,但没有奏效。我使用的 TCP 客户端在本指南中,实际上我需要发送此消息以与服务器通信,表明与设备的通信已关闭并发送消息“设备离线”然后关闭应用程序。

4

3 回答 3

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;
    }
}

方法2:还有另一种方法使用Service来检测应用程序是否终止。见链接

于 2017-07-19T06:58:42.970 回答
0

以下方法调用差异操作

  • 使用主页按钮最小化应用程序 --> 这调用

    onPause() onStop()

  • 从任务管理器中删除应用程序->

    然后为该 MainActivity(启动器)调用 onDestroy()。

所以让一个父活动假设名为 BaseActivity 并覆盖它的 onPause()、onDestroy() 和 onStop() 方法并从这里调用你的实现,然后从你的另一个活动扩展这个活动

于 2017-07-19T06:46:56.097 回答
0

您不应该依赖 onDestroy 方法。根据官方的 android 文档,它并不总是被调用。

尝试将相同的代码放在活动的 onStop() 方法中。

此外,您可以拥有一个由所有其他活动扩展的父活动。

然后,您可以在您的特定子活动中覆盖 onPause() 和 onStop() 方法并处理特定场景。

于 2017-07-19T06:49:06.807 回答