AsyncTask到底能快多少?

CoolEgos 2014-10-05 12:12:52
package zf.ui;

import com.example.android_asynctask.R;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
text = (TextView)findViewById(R.id.text);
// text.setText("123");
// long result = fib(100);
// text.setText(""+result);
new AsyncTask<Object, Object, Object>() {

@Override
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
int n = (Integer)params[0];
long result = fib(n);
return result;
// Integer result = (Integer) params[0];
// return result;
}

@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// text.setText("123456");
text.setText(""+result.toString());
}

}.execute(50);
}
public static long fib(int n){
if(n==1 || n==0)
return 1;
return fib(n-1)+fib(n-2);
}

}


代码里面execute(10)可以执行,到50都执行不了?这是怎么回事?
...全文
190 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DrSmart 2014-10-10
  • 打赏
  • 举报
回复
引用 5 楼 ping71121 的回复:
这和AsyncTask有什么关系? 你用java或者别的编程语言去算fib(50)也是一样的结果。
它不用asynctask在主线程,超过几秒就会出现ANR,主线程还要处理view刷新,性能当然不高了。
DrSmart 2014-10-10
  • 打赏
  • 举报
回复
引用 4 楼 birdsaction 的回复:
AsyncTask 只是个实用的异步工具类,其实性能并不高,这个类的源码你可以去看看,有点浪费资源,里面还用了线程池。 一般用Thread+Handler 就可以了,
少年,性能高低不是你这样回复的, 你知道线程池代表不是一个线程吧,楼主的问题明显是基础没打好,买本计算机组成原理之后看下数据结构就懂了。
ping71121 2014-10-10
  • 打赏
  • 举报
回复
这和AsyncTask有什么关系? 你用java或者别的编程语言去算fib(50)也是一样的结果。
足球中国 2014-10-06
  • 打赏
  • 举报
回复
对于同一个任务不会使程序变快。而会变慢。 应用的场合是两个或者更多的任务或动作要执行,使后面需要执行的任务不需要等待前面的任务执完毕后再执行,而分一些CPU时间片或由另一个CPU去执行。
Birds2018 2014-10-06
  • 打赏
  • 举报
回复
AsyncTask 只是个实用的异步工具类,其实性能并不高,这个类的源码你可以去看看,有点浪费资源,里面还用了线程池。 一般用Thread+Handler 就可以了,
svenwang 2014-10-05
  • 打赏
  • 举报
回复
这和AsyncTask有什么关系? 你用java或者别的编程语言去算fib(50)也是一样的结果。
Kifile 2014-10-05
  • 打赏
  • 举报
回复
根本就不应该问 AsyncTask 有多快这个问题, AsyncTask 主要是用于异步执行耗时较久的任务,例如网络操作或者复杂的数学运算.他的作用只是新开一个线程进行计算,从而避免在主线程中进行耗时较久的操作,阻塞 ui 线程,造成 anr. 至于你到50无法执行下去,应该是由于计算的结果超出了 int 数据的上限,

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧