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