我正在写一个动态壁纸,我在我的主要壁纸服务中分出两个独立的线程。一个更新,另一个更新。我的印象是,一旦你调用thread.start(),它会为你处理所有事情,但经过一些试验和错误之后,似乎如果我想更新并绘制线程继续运行,我必须手动保持调用他们的run()方法?换句话说,不是在两个线程上都调用start()而是忘记,我不得不手动设置一个延迟处理程序事件,该事件每隔16毫秒在更新和绘制线程上调用thread.run()。这是长时间运行线程的正确方法吗?另外,为了杀死线程,我只是将它们设置为守护进程,然后将它们清零。这种方法好吗?我看到使用某种形式的加入()/中断()在while循环的大多数例子......我不明白,一个...我在Android中执行线程的方式是否正确?
1
A
回答
1
- 没有
- 没有
对于#1,我相信你的线程正在终止。一旦run()方法被留下,该线程就被视为终止。如果您希望线程“永久”运行,您需要重复您的操作。
对于#2,即使您失去对它的所有引用,该线程也将继续运行。我会向工作线程建议一个信号或条件,然后在主线程中加入一个join()。
0
就像Yann说的,如果你不得不重新启动你的线程,这意味着你可能没有正确循环。
说出你的壁纸只是有一个球在屏幕上移动,这将是一个样本run()方法:
boolean isAnimating;
public void run() {
isAnimating = true;
while(isAnimating) {
moveBall();
isAnimating = isWallpaperVisible(); // or whatever conditions apply to not keep animating
}
}
这样你的run方法将继续无限期地运行。
相关问题
- 1. 什么是在Azure中执行多线程的正确方法
- 2. 当前在Linux中执行线程编程的正确方法
- 3. 我正在写我的Vue组件的方式是否正确?
- 4. System.Event是否在主线程中执行?
- 5. Android Loader是否在单独的线程中执行其工作?
- 6. 线程安全的方式来检查,如果行插入之前存在 - 是我的代码是否正确?
- 7. C#线程:在不正确的对象上执行的线程
- 8. 如何以编程方式确定ehcache是否正在运行?
- 9. 以编程方式确定IIS站点是否正在运行
- 10. 我是否在WinApi中正确执行动画?
- 11. 确定线程是否正在睡眠
- 12. 正确的方式来结束Android中的线程
- 13. jQuery的不执行正确的方式
- 14. 为什么我的多线程执行是单线程模式
- 15. 如何确定我的DLL是否正在注册或执行?
- 16. 在线程队列上执行多个操作的正确方法是什么?
- 17. 不执行多线程正确
- 18. 是我为sparql执行写的代码是否正确?
- 19. Python,确定Unix进程是否正在运行的正确方法是什么?
- 20. 在Android中异步执行方法的最佳方式(紧凑且正确)
- 21. 以正确的方式使用线程
- 22. 如何确定我是否以编程方式对数据库执行权限?
- 23. 不确定我在boost日志中的线程ID是否正确?
- 24. 线程在Android下进行通信的正确,有效的方法是什么?
- 25. 以编程方式确定我正在运行的发行版
- 26. 执行后AsyncTask线程仍然存在,是否正常?
- 27. 这个算法是否正确执行?
- 28. 在android上执行线程
- 29. 如何在CUDA中执行正确的线程数
- 30. 程序按线路执行的方式