我正在尝试同时运行两个AsyncTasks.(平台是Android 1.5,HTC Hero.)但是,只有第一个被执行.这是一个描述我的问题的简单片段:
public class AndroidJunk extends Activity {
class PrinterTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String ... x) {
while (true) {
System.out.println(x[0]);
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new PrinterTask().execute("bar bar bar");
new PrinterTask().execute("foo foo foo");
System.out.println("onCreate() is done.");
}
}
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo
Run Code Online (Sandbox Code Playgroud)
等等.但是,我得到的是:
onCreate() is done. …Run Code Online (Sandbox Code Playgroud) 在UI中,为了执行一些后台工作,我使用了一个单独的Thread.但正如其他人所说,我现在正在使用AsyncTask.
a Thread和an 之间的主要区别是AsyncTask什么?
在哪种情况下,我应该使用a Thread还是AsyncTask?
我有疑问让我感到困惑.
想象一下,我想在另一个线程中做一些事情,比如获取GPS /位置内容,这些内容按照SDK文档中的建议,必须使用后台线程.
所以这里有一个问题:两者之间有什么区别
Thread通过AND在后台创建AsyncTask
创建Thread thread1 = new Thread(new Runnable()......并实施run()?
multithreading android runnable android-asynctask android-threading
有人能告诉我真正的区别吗?
有人可以告诉我Thread和Handler之间的差异吗?当我们使用Thread并使用Handler时?
我的项目中有两个代码,但我无法理解它们.
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// Do SomeThings
}
};
Run Code Online (Sandbox Code Playgroud)
和
private class readThread extends Thread
{
Handler mHandler;
readThread(Handler h){
mHandler = h;
this.setPriority(Thread.MIN_PRIORITY);
}
@Override
public void run()
{
// Do SomeThings
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个方法中调用这样的处理程序
read_thread = new readThread(handler);
read_thread.start();
Run Code Online (Sandbox Code Playgroud)
哪一个先跑?有人可以解释一下吗?
我想知道,一劳永逸.我在很多地方读过.当我想做一些"长时间操作"时,我应该使用一个Handler.
但我不明白为什么?所有我的'长时间操作'我用常规线程包围,它工作正常.
我为什么要用Handler它呢?
我必须使用的唯一一次Handler是,当我不得不安排一些任务时(postDelayed)
有什么我想念的主要想法handlers(当我真的应该使用它时)?或者也许没有真正的区别?
如果我需要通过HTTP(或其他)异步加载一些数据来更新UI,我在编写Android应用程序时有一些选择(在我确定我错过的许多其他应用程序中):
使用常规线程和处理程序来更新UI.
使用和IntentService,并使用回调或通过Intent广播结果.
使用装载机.
据我所知,IntentService与Activity的生命周期无关,因此对方向等的任何更改都不会影响数据的检索.这种情况不适用于在Activity中触发的AsyncTask或线程.
这个问题的原因是我刚刚读到的内容Loaders,并对其应用感到困惑.它们似乎与数据源关系更紧密,如果数据源发生变化,那么"透明地"将对所有内容进行适当处理.Loaders也似乎容忍配置/方向的变化(我相信).
我一直在使用IntentService来进行RESTful服务调用,并广播由适当的活动接收的结果.
我假设我可以写一个基于HTTP的Loader,但我不确定这是否是这种机制的最佳用法.
使用其中一种异步数据加载方法的优点/缺点是什么?
我正在尝试使用AsyncTask该类来获取网站的内容.logcat W/art: Suspending all threads took: 15(or any other number)ms反复告诉我.我的应用程序被冻结,直到日志消息完成打印.日志完成后,UI会显示.我按照教程进行了双重检查,我的代码应与教程相同.过了一会儿,它会从网站上记录几行代码,但仅此而已.我也尝试过不同的网站.这是我的AsyncTask:
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data …Run Code Online (Sandbox Code Playgroud)