ActivityUI线程和Timer的冲突

新建了一个音乐播放器,在实现seekbar时用到了Timer和TimerTask:

在OnDestory中我注销了播放器,但没有管Timer,所以当程序退出后Timer还在执行,程序出现了这样的错误:

因为在OnDestory中我已经注销了MediaPlayer,但Timer运行的过程中调用MediaPlayer.getCurrentPosition(),所以程序出现了错误。

所以在OnDestory中加上timer.cancel()便解决了错误。

时间: 2024-08-05 16:37:44

ActivityUI线程和Timer的冲突的相关文章

第二十八(线程的同步、守护线程、Timer 定时器)

/* 模拟ATM取款,不是线程同步机制,多线程同时对一个账户进行操作 t1 和 t2 异步编程模型:t1线程执行t1,t2线程执行的是t2,两个线程之间谁也不等于谁 同步编程模型:t1线程和t2线程执行,当t1线程必须等于t2的线程执行结果之后,t1线程才能执行 这是同步编程模型. 什么时候需要引入同步 1. 为了数据安全,尽管应用程序的使用率低,但是为了保证数据安全性,必须的加入线程同步机制 线程同步机制 使程序变成了(等同)单线程 2. 在什么条件下需要使用线程同步 <1> 必须是多线程环

Java线程:Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask.TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力. 一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,

python线程threading.Timer源码解读

threading.Timer的作用 官方给的定义是: """Call a function after a specified number of seconds: t = Timer(30.0, f, args=None, kwargs=None) t.start() t.cancel() # stop the timer's action if it's still waiting """ 意思是: 在一个特定的秒数之后调用一个函数,使用方

Delphi 线程Timer (TThreadTimer)

delphi 自带的Timer控件,使用方便,但它的 OnTimer 事件是在主线程中引发的. 如果在事件中执行较耗时的代码,会引起主界面假死.故实现一个线程的Timer就有必要了. TThreadTimer 基于 TSimpleThread 继承而来. 本例源码下载 unit uThreadTimer; interface uses uSimpleThread; type TThreadTimer = class; // 提前申明 TThreadTimer 是一个类 TOnThreadTime

进程与线程的一个简单解释

作者: 阮一峰 日期: 2013年4月24日 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含义就是,单个CPU一次只能运行一个任务. 3. 进程就好比工厂的车间,它代表CPU所能处理的

线程+任务+同步

线程: 对于所有需要等待的操作,例如移动文件,数据库和网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务.一个进程的多个线程可以同时运行在不同的CPU上或多核CPU的不同内核上. 线程是程序中独立的指令流.在VS编辑器中输入代码的时候,系统会分析代码,用下划线标注遗漏的分号和其他语法错误,这就是用一个后台线程完成.Word文档需要一个线程等待用户输入,另一个线程进行后台搜索,第三个线程将写入的数据存储在临时文件中.运行在服务器上的应用程序中等待客户请求的线程成为侦听器线程.

批量线程阻塞

17在3月6号有失败情况.19,20都停了.10,2也都停了. 2017年3月17日00:29:32分析可能是BatchRunner类里的monitor崩溃了.现象是:批量机的调度程序,是正常的,并且一直到时启动.但是批量并未执行.而非批量机却由于有core的日切调用,会有一条数据.(隔一天有一条,是由于负载的原因)猜想是runBatch在执行17的队列时,遇到某种错误,导致线程挂掉了.但是runBatch又捕捉了Throwable,理论上来说,所有异常错误都会捕捉到的. 或者runBatch没

Linux Condition Variable条件变量避免锁冲突

条件变量Condition Variable的一般用法: 唤醒用法: 1 struct { 2 pthread_mutex_t mutex; 3 pthread_cond_t cond; 4 //whatever variables maintain the condition 5 ) var = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, ... };//声明结构体并初始化 6 7 pthread_mutex_lock(&var

java基础:线程同步

一:先看程序 看输出结果: Thread-0,你是第2个使用Timer的线程 Thread-1,你是第2个使用Timer的线程 结果明显有问题: 这是因为两个线程访问的是同一个Timer对象,其中一个线程调用Timer的add方法时,num++,这个时候,另外一个线程也有可能调用add方法,num又++,然后线程1输出,线程2输出,输出的是同一个num = 2 二:解决办法 add方法上加上synchronized关键字:public synchronized void add(String n