Android线程中断

接触Android开发两个月,最近困扰在线程的中断上,在网上也没找到傻瓜式的方法(高深的看不懂害羞),

现走了条野路子,至少把我遇到的问题解决了。第一次写博客,希望大家给予支持,忠心接受大家的狂喷!


1. Activity中 用Map记录 key:线程ID 与 value:线程状态(判断线程回调后是否还要执行相关代码)

2. 在自定义线程(MyThread)内设置方法获取所需属性:setProperty(...)

   我没用线程的构造函数,因为我只能在new出线程对象后 获取到ID

3. 线程回调到handle中后,判断对应ID的状态(true:执行, false:不执行)

4. 在想中断线程地方,将对应的ID状态改成false(我是在切换画页时想中断所有存入Map的线程)

这样就出现了线程中断的假象


// 线程类

public class MyThread extends Thread {


    private Long id;
    private Handler handler;

    public void setProperty(Long id, Handler handler) {
        this.id = id;
        this.handler = handler;
    }

    @Override
    public void run() {
        Message msg = handler.obtainMessage();
        ...

        map.put("id", id);

        msg.obj = map;

        msg.what = 1;

       handler.sendMessage(msg);

        super.run();
    }

}


// 主画页

class MainActivity extends Activity {

    private Handler handler;

    // 记录线程状态

    protected Map<Long, Boolean> mapList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        MyThread thread = new MyThread();
        thread.setProperty(thread.getId(), handler);
        thread.start();

    }


    @Override
    protected void onStop() {

        // 画页迁移走 所有线程状态变成false
        Iterator iter = mapList.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            mapList.put((Long)entry.getKey(), false);
        }

        super.onStop();
    }


    public class myHandler extends Handler{

        @Override
        public void handleMessage(Message msg) {

            switch (msg.what){
                case 1:
                    if (null == mapList){
                        break;
                    }


                    Map<String, Object> map = (Map<String, Object>) msg.obj;
                    Long id = (Long) map.get("id");
                    // 判断线程状态,如果画页迁移走,对应的所有开启的线程状态都变成false

                    // 这样就会出现线程中断的假象,

                    if (mapList.get(id)) {
                    ...

                   }

                    break;
                default:
                    break;
            }
            super.handleMessage(msg);
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值