activity 启动的时候 用“startService(new Intent(this, mService.class));”启动一个Service
同时 显示一个ListView。Service中 private Runnable run = new Runnable() { @Override
public void run() {
//从sd卡读取文件的方法沈略(读取sd卡花费多长时间,ListView就看多长时间)
handler.postDelayed(run, 5000);//这里设置的的5秒钟,也就是下面activity打嗝问题的周期
}
};然后在Service中的onStart里面 th = new Thread(run);
th.run();结果是在拖动ListView时,每隔5秒钟 就卡一下。给位给些指点,分析分析到底是哪里出了问题,是多线程没用对,还是IO阻塞?
同时 显示一个ListView。Service中 private Runnable run = new Runnable() { @Override
public void run() {
//从sd卡读取文件的方法沈略(读取sd卡花费多长时间,ListView就看多长时间)
handler.postDelayed(run, 5000);//这里设置的的5秒钟,也就是下面activity打嗝问题的周期
}
};然后在Service中的onStart里面 th = new Thread(run);
th.run();结果是在拖动ListView时,每隔5秒钟 就卡一下。给位给些指点,分析分析到底是哪里出了问题,是多线程没用对,还是IO阻塞?
解决方案 »
- Android 4.0.4 如何开启recovery模式
- 想开发一款基于Android和GIS的拼车软件,请求大神指导!
- android 怎么不用线程,也能实时得到当前的系统时间??????calendar只是得到一次系统的时间。
- 关于gallery一些特性的讨论
- android中listview跟textview和focus问题
- 请教:从linux移植到Android
- SOCKET无法接收服务端返回数据
- 关于控件移动translateAnimation问题
- 为什么调用系统拍照功能 然后将图片无法保存到指定文件夹。
- gson解析新浪微java.lang.IllegalStateException: Expected a name but was NUMBER
- android 有没有办法使dialog与控件对齐
- 如何通过android模拟器从android market上下载软件
th.run();
启动线程是用th.start(),run只是调用th的run方法,不会开辟一个线程。
这个是干嘛用的?
你已经再thread中执行了run对象,不需要再次执行了吧?
我是想让Runnable 每过五秒钟循环执行的!
handler是那个? th的?还是ui thread的?如果是ui thread的,那肯定就会出现你说的问题了。
大致的代码如下:
Handler m_handler=null;
HandlerThread m_thread = new HandlerThread("PowerManagerService") {
protected void onLooperPrepared() {
m_handler=new Handler();
m_handler.postDelayed(run, 5000);
}
};
mHandlerThread.start()
public class MyThread extends Thread {
private boolean running = false;
public void run() {
running = true;
while (running) {
yourWork();//你想做的事情
try {
Thread.sleep(5000);
} catch (Exception a) {
}
}
public void exitThread() {
running = false;
} }
在activity代码中,或者说在UI线程中,MyThread myThread = new MyThread();myThread.start();就可以了。exitThread()设置线程循环的标志位running无效,退出线程。myThread.exitThread()这样调用就可以了
恩,确是应该这样来搞! lz本来的代码还是会跑在主线程中,如果你的handler是定义在主线程中的话。