美文网首页
Android 关于Thread的使用

Android 关于Thread的使用

作者: 刘坤林 | 来源:发表于2019-10-28 18:07 被阅读0次

诸多大神们对Thread说法不一,以至于刚毕业的我来说,实在是难以抉择。但我在学习了一番之后,个人觉得有必要做个记录了。

Thread的理解:不需要界面,默默的在后台做一些事情,尽量使用extends Thread来创建需要做持续性的或者需要频繁实现功能的线程。

先看图

效果图.gif

代码:

1、Thread代码

public class MyThread2extends Thread {

private int count =0;    //为了记录、显示线程的运行情况

    private static MyThread2instance;

    public static MyThread2getInstance() {

if (instance ==null) {

synchronized (MyThread2.class) {

instance =new MyThread2();

            }

}

return instance;

    }

public MyThread2() {

MyThreadManager.addThread(this);

        setName(getClass().getSimpleName());

    }

@Override

    public void run() {

try {

while (!isInterrupted()) {

count++;

                sendMsg("ID[" + getId() +"]正在运行中(" +count +")...");

                Logger.i("正在运行中(" +count +")...");

                sleep(2000);

            }

}catch (InterruptedException e) {

Logger.e("@睡眠被打断" + e.getMessage());

            sendMsg("线程" + getClass().getSimpleName() +"被中断");

        }finally {

count =0;

        }

}

@Override

    public synchronized void start() {

try {

if(!isAlive()) {

super.start();

            }else{

sendMsg(getClass().getSimpleName() +"已经在运行,且没有被打断");

            }

}catch (Exception e) {

sendMsg(getClass().getSimpleName() +"启动失败[" + e.getMessage() +"]");

        }

}

@Override

    public void interrupt() {

super.interrupt();

        instance=null;

    }

private void sendMsg(String message) {

Intent intent =new Intent();

        intent.setAction(MyThreadManager.BroadCast_Action);

        JSONObject jsonObject =new JSONObject();

        jsonObject.put("message", message);

        jsonObject.put("index", 1);

        intent.putExtra(MyThreadManager.BroadCast_Data_FLAG, jsonObject.toJSONString());

        MyApp.getApp().sendBroadcast(intent);

    }

}

这是其中一个Thread的写法,其他的跟他差不多。

2、activity代码:

启动线程:

MyThread1.getInstance().start();

停止线程:

if (!MyThread2.getInstance().isInterrupted())

{

    MyThread2.getInstance().interrupt();

小结:我觉得这样用,我能通过start和interrupt来尝试启动或者终端该线程,满足了我的需求,特此记载!另外打断线程是在线程睡眠时才可以成功打断,如果线程正在执行某种操作,那么将无法打断,但等待其空闲下来,即可停止,且不必担心不能及时停止线程的问题,毕竟你写一个线程去故意长时间占用Cup是不科学的。因为stop方法被弃用,只能这样了。

重要说明:

①请支持原创,转载请注明出处。

②小白编程,不喜勿喷;如有错漏,望君海涵。

相关文章

网友评论

      本文标题:Android 关于Thread的使用

      本文链接:https://www.haomeiwen.com/subject/rygbvctx.html