确定应用程序是否已关闭而不使用OnStop()

时间:2015-07-24 05:14:23

标签: android android-activity broadcastreceiver localbroadcastmanager

我想要做的是当用户退出我的应用程序时向我的后端服务器发送注销请求(可能在任何活动期间发生,有很多)。

似乎我无法使用OnStop(),因为我有一个图库选择器和相机Intent,当它们启动时,OnPauseOnStop被调用。我需要一种明确知道该应用程序已关闭的方法。

我已经阅读了有关使用Service / BroadcastReceiver甚至是LocalBroadcastManager的信息,或者可能会将请求与点击主页按钮时绑定在一起。

我无法检查应用程序是否已发送到后台,因为对于相机/图库,Intent开始以及将应用程序发送到后台都是如此。我还尝试检查正在启动的活动的包名称,但这可能在其他设备上可变(例如,图库可能有不同的包名称)。

非常感谢任何建议/指示。

编辑:我发现实际上没有办法拦截主页按钮按下。仍在寻找解决方案!

1 个答案:

答案 0 :(得分:1)

我有类似这样的问题,我使用服务来解决我的问题。这就是我做的事情

在主要活动中

 ServiceConnection mConnection = new ServiceConnection() {
 public void onServiceConnected(ComponentName className,
                                       IBinder binder) {
            ((KillingNotificationBar.KillBinder) binder).service.startService(new Intent(
                    Main.this, KillingNotificationBar.class));
        }

        public void onServiceDisconnected(ComponentName className) {
        }

    };
 bindService(new Intent(Main.this,
                    KillingNotificationBar.class), mConnection,
            Context.BIND_AUTO_CREATE);

KillingNotificationBar类

public class KillingNotificationBar extends Service {
private final IBinder mBinder = new KillBinder(this);
public class KillBinder extends Binder {
    public final Service service;
    public KillBinder(Service service) {
        this.service = service;
    }
}
@Override
public IBinder onBind(Intent intent) {
    return mBinder;
}

@Override
public void onCreate() {
    you will know if the activity is destroyed
}
}

在清单

中添加此内容
 <service android:name=".services.KillingNotificationBar"/>

注意 执行需要1-5秒。