在app关闭之前我该怎么做?

时间:2017-07-19 06:36:10

标签: java android tcp ondestroy application-close

我在Android中创建了一个应用程序,其中我有一个 TCP客户端,但现在我只想在应用程序即将关闭时向服务器发送消息,我试图在 onDestroy 方法中添加openConnection(与TCP客户端打开连接)和sendMessage(向TCP服务器发送消息)操作但<强大>没有用。 我已经使用的TCP客户端在guide中,实际上我需要发送此消息以便与服务器通信,该设备与设备的通信已关闭并发送消息&#34;设备离线&#34;然后关闭应用程序。

3 个答案:

答案 0 :(得分:1)

方法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检测应用程序是否已终止的另一种方法。见link

答案 1 :(得分:0)

跟随diff动作的方法调用

  • 使用主页按钮最小化应用程序 - &gt;这个叫

    的onPause() 的onStop()

  • 从任务管理器中移除应用程序 - &gt;

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

  

所以创建一个父Activity假设命名为BaseActivity并覆盖它   onPause(),onDestroy()和onStop()方法并调用你的   从这里开始实现,然后从你的   另一项活动

答案 2 :(得分:0)

您不应该依赖onDestroy方法。根据官方的android文档,它不会被永远调用。

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

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

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