【发布时间】:2015-09-19 00:54:54
【问题描述】:
我正在关注 codelearn 中的教程,并尝试创建一个 AsyncTask 来生成推文并执行另一个 AsyncTask 以写入缓存文件。
我有 Thread.sleep,所以第一次加载时的 UI 会等到推文被写入缓存文件。首先我执行 AysncTask new AsyncWriteTweets(this.parent).execute(tweets); 然后休眠 10 秒。
但在 logcat 中,我可以看到 AsyncWriteTweets 也在 10 秒睡眠后执行。因此 onPostExecute 会在推文写入缓存文件之前执行,从而出现空白屏幕。
public class AsyncFetchTweets extends AsyncTask<Void, Void, Void> {
private TweetListActivity parent;
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
ArrayList[] temp;
public AsyncFetchTweets(TweetListActivity parent){
this.parent = parent;
}
@Override
protected Void doInBackground(Void... params) {
int result = 0;
Log.d("ASync", "Calling asycn");
for (int i=0;i<4;i++){
Tweet tweet = new Tweet();
tweet.setTitle("Title Async Very New" + i);
tweet.setBody("Body text for tweet no " + i);
tweets.add(tweet);
}
new AsyncWriteTweets(this.parent).execute(tweets);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result){
Log.d("Async", "on Post execute");
this.parent.renderTweets();
}
}
PS:我的假设是 AsyncTask 应该创建一个新线程,因此 父级中的 Thread.sleep 不应阻止子级。如果不是这样 请告知我该如何解决这个问题。
【问题讨论】:
标签: java android multithreading android-asynctask