我正在开发一个应用程序,其中在一个活动中将不同的视图添加到 ViewGroup 中,这个过程需要一段时间才能启动,所以我想在前台运行一个进度对话框,而 UI 可以在后台设置。
我试过的
我尝试使用
1. AsyncTask但它给出了 Exceptions 。2. 在使用线程和runnable()时,我得到InvocationTargetException。
我想知道什么是最好的方法?
您无法通过后台任务进行 UI 更改。
如果使用AsyncTask
,则只能从onPostExecute()
或onProgressUpdate()
方法更新 UI。
另一种选择是使用 a Handler
,它(除其他外)可以Runnable
在主线程上执行 s 。
编辑:处理程序必须在主线程上实例化。在任何线程中,您都可以使用post(Runnable)
orsendMessage(Message)
以及它们的各种变体。因为sendMessage()
你需要覆盖handleMessage(Message)
.
你能插入一些你的代码吗?这将有助于确定问题的原因。
但是您需要知道您不能从后台线程更改 UI。它会给你一个例外。您可以做的是编写一个AsyncTask
,它在其方法中初始化对象并为它们分配值,然后在其doInBackground
方法中修改 UI 线程onPostExecute
。
它看起来像这样:
private class myAsyncTask extends AsyncTask<Void,Void,Void>
{
@Override
protected void onPreExecute()
{
//show progress dialog
}
@Override
protected Void doInBackground(Void... arg0)
{
//init objects, and do stuff with them
return null;
}
@Override
protected void onPostExecute(Void result)
{
//make changes to UI thread
//close progress dialog
}
}
Juste 保留您的 AsyncTask 并在 onPostExecute 中更新 UI,而不是在 doInBackground 中执行此操作。