关于Android用户强退APP逻辑处理的发现

最近写程序遇到了一个比较麻烦的问题,需要在用户手动杀死app时做处理,原因是app通过websocket创建了一个房间,用户在退出房间时需要给其他人发送一个消息,让房间内的人把自己从各自的列表里去掉。

然而如果遇到用户通过手动划掉app(Home键任务管理)的话,我们是获取不到Activity的onDestory方法的,那就没办法处理退出房间的请求了。
原本是想着写一个service,在用户调出任务管理器时(会获取到onPause和onStop方法),启动service并不断判断activity是否存在,如果不存在则发送退出房间通知。
但是实际在测试的时候发现,当我启动service之后,再通过任务管理杀掉应用时,我的activity获得到了onDestory方法的调用!
Log如下,暂不清楚是何原理,如果有需要的可以自己试一下。

12-27 10:10:55.931 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onCreate
12-27 10:10:55.932 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onStart
12-27 10:10:55.934 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onResume
12-27 10:10:55.952 14821-14821/com.example.grantz.myapplication1 I/MainActivity: serviceonCreate
12-27 10:10:55.983 488-809/? E/BufferQueueProducer: [com.example.grantz.myapplication1/com.example.grantz.myapplication1.MainActivity] connect: already connected (cur=1 req=1)
12-27 10:10:56.013 1228-1396/? I/ActivityManager: Displayed com.example.grantz.myapplication1/.MainActivity: +304ms
12-27 10:11:10.502 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onPause
12-27 10:11:10.544 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onStop
//-----------此处手动关闭app-----------
12-27 10:11:12.296 14821-14821/com.example.grantz.myapplication1 I/MainActivity: onDestroy
12-27 10:11:12.299 14821-14821/com.example.grantz.myapplication1 I/MainActivity: serviceonDestroy

此处是通过手动kill app的log。

service中并未做任何处理,仅仅是创建了一个service而已,使用的是startService方式启动的。
代码很简单

MainActivity

  @Override
    protected void onResume() {
        super.onResume();
        serviceStop();
        Log.i("MainActivity","onResume");
    }

  public void serviceStart(){
        Intent intent=new Intent(this,CheckAcitivityService.class);
        startService(intent);
    }

    private  void serviceStop(){
        Intent intent=new Intent(this,CheckAcitivityService.class);
        stopService(intent);
    }
    @Override
    protected void onStop() {
        super.onStop();
        serviceStart();
        Log.i("MainActivity","onStop");
    }

    @Override
    protected void onDestroy() {
        serviceStop();
        super.onDestroy();
        Log.i("MainActivity","onDestroy");
    }

Service

public class CheckAcitivityService  extends Service{


    @Override
    public void onCreate() {
        Log.i("MainActivity","serviceonCreate");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        Log.i("MainActivity","serviceonDestroy");
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

尚不知为何如此

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值