Java 在应用程序关闭之前,我如何执行某些操作?
我在安卓系统中制作了一个应用程序,其中我有一个TCP客户端,但现在我只想在应用程序即将关闭时向服务器发送消息,我正在尝试添加Java 在应用程序关闭之前,我如何执行某些操作?,java,android,tcp,ondestroy,application-close,Java,Android,Tcp,Ondestroy,Application Close,我在安卓系统中制作了一个应用程序,其中我有一个TCP客户端,但现在我只想在应用程序即将关闭时向服务器发送消息,我正在尝试添加openConnection(打开与TCP客户端的连接)和sendMessage(向TCP服务器发送消息)onDestroy方法中的操作,但无效。 我使用的TCP客户端就在这里,实际上我需要向服务器发送此消息,告知与设备的通信已关闭,并发送消息“设备处于脱机状态”,然后关闭应用程序。以下方法调用diff action 使用主页按钮-->此调用最小化应用程序 onPause
openConnection
(打开与TCP客户端的连接)和sendMessage
(向TCP服务器发送消息)onDestroy方法中的操作,但无效。
我使用的TCP客户端就在这里,实际上我需要向服务器发送此消息,告知与设备的通信已关闭,并发送消息“设备处于脱机状态”,然后关闭应用程序。以下方法调用diff action
- 使用主页按钮-->此调用最小化应用程序 onPause() 顶部()
- 从任务管理器中删除应用-> 然后为该MainActivity(启动器)调用onDestroy()
您不应该依赖onDestroy方法。根据android官方文档,它并不总是被调用 尝试将相同的代码放在活动的onStop()方法中 此外,您还可以拥有一个由所有其他活动扩展的父活动
然后,您可以覆盖特定子活动中的onPause()和onStop()方法,并处理特定场景。方法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:还有一种方法使用服务来检测应用程序是否终止。请参见我必须在MainActivity中实现它,还是创建一个新类?我怎样才能从主要活动中唤起它呢?我认为你在任何活动中都做不到这一点。您应该真正创建一个应用程序类,在我使用所有这些创建了一个新类之后,我如何在MainActivity中调用它?在您创建应用程序类之后,您应该在清单文件中设置应用程序名称,请参见。您不需要调用MainActivity中的任何内容。在这里做你的工作。更好地理解应用程序类see看起来很有用,因为我可以看到日志“App in background”,但当我从任务中关闭它时,没有日志“App is finishing”。。。我应该在我的应用程序中的何处实现messageSend操作?尝试在开始时创建一个服务,然后在调用
onDestroy
时向该服务发送广播,即使应用程序宕机,服务仍将保留…如果用户关闭手机,这可能不起作用…@MarceloFilho实际上我正在尝试使用它,但我只成功再次启动TCP客户端,因为它关闭应用程序太快,无法同时发送消息。