【发布时间】:2017-06-17 21:50:45
【问题描述】:
我制作了非常简单的应用程序。基本上,如果按下按钮,我有活动 A 会启动活动 B。这是代码
openMapFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putExtra("routeId", id);
startActivity(intent);
}
});
但这就是问题所在。活动B非常繁重(它基本上是打开地图(mapsforge)并进行其他繁重的计算)。因此,当按下按钮时,我的 UI 冻结了大约 4 秒,然后我打开了活动 B。我想展示一些动画,比如圆形进度条或类似的东西。那么是否可以不在 UI 线程中启动活动?
这是我目前尝试过的
new Thread(new Runnable() {
@Override
public void run() {
while (progressStatus < 100) {
progressStatus += 25;
handler.post(new Runnable() {
@Override
public void run() {
//animation code
}
});
try {
Thread.sleep(1600);
if (progressStatus == 100){
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putExtra("routeId", id);
startActivity(intent);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
但这并不是我所需要的。有什么解决方案或建议吗?
【问题讨论】:
-
如果繁重的代码在 MapActivity 中,这将不起作用。您应该尝试重构 MapActivity 以将代码移动到例如线程或异步任务。如果您需要帮助,请添加 MapActivity 的代码
标签: android android-activity ui-thread