new Thread(new Runnable() {
@Override
public void run() {
Message msg = new Message();
msg.what = 0;
myhandler.sendMessage(msg);
}
}).start();
public Handler myhandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) { //判断标志位
case 0:
MakeToast("finished!");
break;
}
}
};

中断线程,thread_update_view是线程的名字:

if(thread_update_view!=null){
thread_update_view.interrupt();
thread_update_view = null;
}

关于中断,最好就使用上面这个interrupt的方法,因为不会强行中断,但是需要注意:

比如:

thread_cut_music = new Thread(new Runnable() {
@Override
public void run() {
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
myApp.MakeToast("找不到资源");
int temp = (myApp.getUser_music_playing()+1)%myApp.getUser_music_url_list().size();
myApp.setUser_music_playing(temp);
CutMusic();
}
}
});

这里面mediaPlayer.prepare()可能会执行很久,如果在这过程中使用了interrupt中断该线程,prepare()还是会继续执行,这时如果抛出错误,那么catch里面的内容会被执行,并不会因为interrupt而取消执行。

所以,很多时候需要这样做。

private class ThreadSafeCut extends Thread {
public void run() {
try {
mediaPlayer.prepare();
if(isInterrupted()) return;
if(myApp.getIs_usermusic_playing()){
mediaPlayer.start();
}
} catch (IOException e) {
e.printStackTrace();
if(!isInterrupted()){ //如果线程没被中断,则自动切歌
Log.d(TAG, "run: "+isInterrupted());
myApp.MakeToast("找不到资源");
int temp = (myApp.getUser_music_playing()+1)%myApp.getUser_music_url_list().size();
myApp.setUser_music_playing(temp);
CutMusic();
}
}
}
}

可以利用isInterrupted()来查看这个线程是否被中断。

在Activity销毁之前,清除Handler所有Message和Runnable;

线程 Thread Handler的更多相关文章

  1. 学习通过Thread+Handler实现非UI线程更新UI组件

    [Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则 ...

  2. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...

  3. Thread+Handler 线程 消息循环(转载)

    近来找了一些关于android线程间通信的资料,整理学习了一下,并制作了一个简单的例子. andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图 ...

  4. 学习通过Thread+Handler实现非UI线程更新UI组件(转)

    [Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则 ...

  5. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

    目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+L ...

  6. AsyncTask 与 Thread+Handler

    AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute().onPostExecute()及更新UI方法on ...

  7. Android 线程Thread的2种实现方法

    在讲解之前有以下三点要说明: 1.在Android中有两种实现线程Thread的方法: ①扩展java.long.Thread类: ②实现Runnable()接口: 2.Thread类是线程类,它有两 ...

  8. Android线程和handler

    根据视频仿照着写了个demo: package com.wyl.wylthreadtest; import android.graphics.Color; import android.os.Bund ...

  9. 线程 Thread Runnable 守护线程 join MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. Redis位图实现用户签到功能

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...

  2. container_of使用小结

    先上演示代码 #include <stdio.h> #include <stdlib.h> /* offsetof example */ #include <stddef ...

  3. Notification html5 的通知api

    https://developer.mozilla.org/zh-CN/docs/Web/API/notification 使用方法 var notification = new Notificati ...

  4. subsets 回溯 给定集合,枚举子集。元素不重复

    这个回溯感觉掌握的有些熟练了. 两种方式,递归和循环. 感觉就是套框架了. /** * Return an array of arrays of size *returnSize. * The siz ...

  5. BlockingQueue之DelayQueue的学习使用

    DelayQueue 是一中阻塞队列,需要实现接口Delayed定义的方法.做下使用记录和心得吧, @Datapublic class DelayQueueExample implements Del ...

  6. python中time模块和datetime模块

    time模块和datetime模块 时间分为三种模式(time 模块) 时间戳   (time.time()) 格式化字符串 (time.strftime(%Y-%m-%d %H:%M:%S %p)) ...

  7. C语言函数入参压栈顺序为什么是从右向左?

    看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...

  8. html中,纯数字或纯英文的一串字符超出父容器不会折行显示,如何解决?

    这种情况在软件使用过程中一般不会出现,只有测试人员在测试的时候手比较贱会给你弄一个这种数据,当然这也算是bug吧. 如图:“经营范围”的值严重超出父容器长度,并且没有像“服务信息”一样折行显示.这种情 ...

  9. centos6.5下oracle自动备份删除指定天数的文件

    第一步先做一个备份 #!/bin/sh export ORACLE_BASE=/home/oracle/app export ORACLE_HOME=/dbhome_1 export ORACLE_S ...

  10. C#导出Excel,某单元格内容长度超过255 的解决方法

    public static void ToExcel(DataTable dtSource, string strPath, string strSheetName) { System.Data.Ol ...