我怎样才能在应用程序关闭之前做些什么?
How can i do something before app is closed?
我在 android 中制作了一个应用程序,其中有一个 TCP 客户端,但现在我只想向服务器 发送消息当应用程序将要关闭时,我试图在[中添加openConnection
(打开与TCP客户端的连接)和sendMessage
(向TCP服务器发送消息) =16=]onDestroy 方法,但是没有用。
我使用的 TCP 客户端在这个 中,实际上我需要发送此消息来通知服务器与设备的通信已关闭并发送消息 "Device is Offline" 然后关闭应用程序。
以下方法调用 diff 操作
使用主页按钮最小化应用程序 --> 这调用
onPause()
onStop()
从任务管理器中删除应用程序 ->
然后为该 MainActivity(启动器)调用 onDestroy()。
So Make an parent Activity suppose named BaseActivity and override its
onPause(), onDestroy() and onStop() method and call your
implementation from here and then extend this Activity from your
another Activities
您不应依赖 onDestroy 方法。根据官方 android 文档,它并不总是被调用。
尝试将相同的代码放入 activity 的 onStop() 方法中。
此外,您可以有一个由所有其他活动扩展的父项 activity。
然后您可以在您的特定子活动中覆盖 onPause() 和 onStop() 方法并处理特定场景。
方法一:可以使用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
我在 android 中制作了一个应用程序,其中有一个 TCP 客户端,但现在我只想向服务器 发送消息当应用程序将要关闭时,我试图在[中添加openConnection
(打开与TCP客户端的连接)和sendMessage
(向TCP服务器发送消息) =16=]onDestroy 方法,但是没有用。
我使用的 TCP 客户端在这个
以下方法调用 diff 操作
使用主页按钮最小化应用程序 --> 这调用
onPause() onStop()
从任务管理器中删除应用程序 ->
然后为该 MainActivity(启动器)调用 onDestroy()。
So Make an parent Activity suppose named BaseActivity and override its onPause(), onDestroy() and onStop() method and call your implementation from here and then extend this Activity from your another Activities
您不应依赖 onDestroy 方法。根据官方 android 文档,它并不总是被调用。
尝试将相同的代码放入 activity 的 onStop() 方法中。
此外,您可以有一个由所有其他活动扩展的父项 activity。
然后您可以在您的特定子活动中覆盖 onPause() 和 onStop() 方法并处理特定场景。
方法一:可以使用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