我正在开发一个应用程序,其中有一些选项卡,其中一个(默认为一个)是MapActivity
。我的MapActivity
拥有自己的ProgressDialog
(它会加载一些内容onCreate
)。
当我尝试在我的主要活动(ProgressDialog
)中加载另一个TabActivity
时,黑色屏幕会显示,直到地图加载为止。然后MapActivity
的对话框显示并隐藏(加载内容后),然后TabActivity
的对话框显示...
请注意,在使用TabActivity
调用intent之前,我在TabActivity.onCreate()
中启动MapActivity
对话框。
任何人都可以帮助我吗?
我TabActivity
的代码:
public class MyTabActivity extends TabActivity {
private ProgressDialog progressDialog = null;
private Handler progressDialogHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (null != progressDialog)
progressDialog.dismiss();
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
progressDialog.show();
setContentView(R.layout.main);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
prepareTabs();
return null;
}
protected void onPostExecute(Void result) {
progressDialogHandler.sendEmptyMessage(0);
};
}.execute();
}
private void prepareTabs() {
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, MyMapActivity.class);
spec = tabHost.newTabSpec(MyMapActivity.TAG).setIndicator(MyMapActivity.TAG).setContent(intent);
tabHost.addTab(spec);
}
}
我得到的错误(与tabHost.addTab(spec);
对齐):E/AndroidRuntime(8762)
,FATAL EXCEPTION: AsyncTask #1
这是MyMapActivity:
public class MyMapAcitivity extends MapActivity {
private MapView mapView;
private ProgressDialog progressDialog = null;
private Handler progressDialogHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (null != progressDialog)
progressDialog.dismiss();
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.my_map_activity);
loadMap();
setupLocationBasedServices();
}
private void loadMap() {
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
loadEvents();
}
private void loadEvents() {
progressDialog = new ProgressDialog(MyMapActivity.this);
progressDialog.setMessage("Loading events...");
progressDialog.show();
new AsyncTask<Void, Void, ArrayList<Event>>() {
@Override
protected ArrayList<Event> doInBackground(Void... params) {
new EventLoader().loadEvents();
progressDialogHandler.sendEmptyMessage(0);
return eventLoader.getEvents();
}
}.execute();
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
答案 0 :(得分:0)
如果您可以在看到这些行为的位置发布一些代码标记,但是根据您所描述的内容,听起来主线程被阻止了。尝试将对UI不重要的内容移动到后台(AsyncTask)。
更新:
我认为你应该在你的标签Activity中删除进度对话框。我甚至会在这里回溯建议删除AsyncTask(现在我可以看到发生了什么)。此外,在TabActivity中的onCreate()中,删除对话框,这可能导致线程阻塞。
我认为唯一的进度对话框应该是MyMapActivity.loadEvents()
。我认为你描述的行为有点复杂。如果这是我,我会手动跟踪,通过调试器设置调用什么,何时以及在哪个线程上。如果我有我的开发机器,我会尝试自己的,但不幸的是我没有。我会看看能否稍后复制你的问题。