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