在handler里new了一个Thread子线程休眠2S结果主线程变卡了

我是来捕鱼的 2016-04-21 10:29:02
private int is_Finish = 0;
private int FINISH = 0;
public void onBackPressed() {
Log.i("isfinish", "" + is_Finish);
if(is_Finish == 0){
Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_SHORT).show();
is_Finish = 1;
Message msg = new Message();
msg.what = FINISH;
is_Finish++;
handler.sendMessage(msg);
}else{
finish();
}
}

Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
try {
Thread.sleep(2000);
is_Finish = 0;
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
};

这是代码,目的是达到在2S内连续按两次返回键退出程序的目的,但是按一次返回键后就会卡在handler中线程的休眠上,按理说不应该啊,这是怎么回事?
...全文
452 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
forrg 2016-04-27
  • 打赏
  • 举报
回复
你在Handler 里休眠就是在主线程里休眠 ,要在Thread里休眠 ,Handler是主线程里的处理器,是应该在Thread里睡2秒再发消息让Handle处理
ys527663232 2016-04-26
  • 打赏
  • 举报
回复 1
这段代码告诉我们,不是你想在哪儿睡就在哪儿睡,注意身体
sydMobile 2016-04-24
  • 打赏
  • 举报
回复
楼主不给分啊
我是来捕鱼的 2016-04-24
  • 打赏
  • 举报
回复
谢谢楼上啦 我知道哪里的问题啦,阻塞主线程了!
ganshenml 2016-04-21
  • 打赏
  • 举报
回复
这个handler就是在主线程中呀,你这是要主线程休眠两秒啊。 话说,两秒内连续回退你怎么是这么实现的?

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {//退出程序
            if (System.currentTimeMillis() - exitTime > 2000) {
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
                return false;
            }
        } else {
            finish();
            System.exit(0);
        }
        return super.onKeyDown(keyCode, event);
    }

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧