【问题标题】:What is the proper use of threads in Android?Android中线程的正确使用是什么?
【发布时间】:2012-04-24 14:18:59
【问题描述】:
我有一个包含几个方法的主要活动。
- GetTopics:调用 REST API 并返回 JSON 结果
- BindTopics:在屏幕上显示 GetTopics 的结果
还有一些其他的具有类似功能,但我确信我可以将解决方案适用于所有方法。
问题:在单独的线程中运行这些的正确方法是什么?他们应该在同一个线程中吗? GetTopics 完成后是否应该调用 BindTopics?
无论哪种方式,UI 不是在异步线程完成之前构建的吗?如果是这样,我该如何更新 UI?
感谢任何帮助。
【问题讨论】:
标签:
android
multithreading
progressdialog
【解决方案2】:
我会在带有 AsyncTask 的进度对话框中加载它。您需要声明处理程序以更新 UI 线程中的控件。
例子:
private Handler handler = new Handler();
final ProgressDialog pd = new ProgressDialog(this);
pd.setTitle("Getting topics..");
pd.setMessage("Please while topics are retrieved");
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setIndeterminate(true);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
GetTopics();
return null;
}
@Override
protected void onPreExecute() {
pd.show();
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result) {
BindTopics();
pd.dismiss();
handler.post(new Runnable() {
public void run() {
// update UI
// remove loading view
// load details of topics
}
});
super.onPostExecute(result);
}
}.execute();
【解决方案4】:
对我来说,线程的主要用途是当我的应用程序必须从 ftp 服务器下载大量数据时。但是在下载时我希望用户仍然可以使用我的应用程序。如果我在主线程中编写了下载代码,用户将无法使用该应用程序,并且所有按钮都将不起作用。线程的主要思想是为每个线程划分CPU使用时间。
如果您希望同时执行多个任务,则必须使用线程。