有关正确使用Threadsvs. Handlersvs. 的问题有很多AsyncTask.(像这里和这里)
这些问题很好地解决了何时使用什么问题.我的问题更多的是关于某些类型案件的绩效影响.
作为一个例子,我经常看到其他人编写代码,他们只使用Threads这些代码来为将来安排一些代码执行.每当我看到这一点时,我本能地感觉要重构代码以使用a Handler而只是延迟发布一个帖子runnable.
这是一个示例,其中一个Thread用于更新某些媒体播放的搜索栏mediaplayer,然后是我的方式.
我看到了很多东西:
if (positionTracker != null && positionTracker.isAlive()
&& !positionTracker.isInterrupted()) {
return;
}
positionTracker = new Thread(new Runnable() {
public void run() {
int currentPosition = 0;
int total = player.getDuration();
while (player != null && CurrentPosition < total) {
try {
Thread.sleep(1000);
currentPosition = player.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return; …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中我有按钮,单击时将查询数据库并在屏幕上显示结果.查询操作通常需要1~3秒.这些按钮将经常被点击.
我已经在AsyncTask和Thread上实现了这个动作,但看起来差别很小.
但是从长远来看,尤其是在按钮被多次点击时,这在资源(CPU,内存)方面会更有益吗?
我正在尝试了解 Looper...
这次我有点困惑,因为我只使用(直到现在)while(true) 条件来保持线程处于无限循环中。
我只想知道使用 Looper 还是 while(true) 条件更好。
我在互联网上搜索了我的问题的可能答案,但我对找到同时使用 Looper 和 while(true) 的代码感到非常失望。
可能我没有明白使用 Looper 的意义,但是,你知道,我们是来学习的……不是吗?
new Thread(new Runnable(){
}).run();
Run Code Online (Sandbox Code Playgroud)
VS
new AsyncTask().execute();
Run Code Online (Sandbox Code Playgroud)
我的印象是他们是同一个东西,都开始了新的工作线程,但事实并非如此吗?
我问的原因是因为如果我尝试使用任何类型的网络连接new Thread()我得到一个NetworkOnMainThreadException但是当我在异步任务中放入相同的代码时,我没有得到它.
这个差异的另一个例子是使用google maps api v2,其中所有的情节/显示/隐藏必须在上面进行,main thread但是如果我new Thread()用来隐藏/显示标记,那么看起来很好但是如果我尝试在异步任务中显示/隐藏我得到一个例外,说它需要在主线程上完成.
它new Thread()真的不启动辅助线程?
编辑
不知道为什么这个被关闭,因为提供的链接我已阅读并没有回答我的问题,并没有提到使用run()vs start()回答我的问题
我对Android中的多线程有点困惑.我知道我们可以实现使用AsyncTask和Handler.通常什么时候我们应该通过在Android中扩展Thread Class来实现?任何人都可以举一个例子,我们只需要通过扩展线程类而不是使用AsyncTask或来做它Handler.
考虑一个示例应用程序,我们在活动中有一个弹跳球(忘记动画部分),我需要每20分钟更改一次球的颜色,我需要从服务器获取颜色代码并更新球UI.现在我该怎么做到这一点?有人可以解释使用AsyncTask或Handler仅使用线程类(没有Asynctask或Handler)?
我该如何处理使用服务从服务器下载大型有效负载.