3

我有活动 A 需要在退出时执行操作 - 将内容保存到数据库 - 启动活动 B

由于保存可能需要一段时间,但我应该启动一个新线程以在后台运行数据库访问,而用户正忙于读取活动 B 的内容。(顺便说一句,B 不使用保存的数据)。

所以我在活动 A

 FinishStuff(){
 Intent ourIntent = new Intent(this, ActivityB.class);
 startActivity(ourIntent);

 handler = new Handler();
 handler.post(dbSaver);
}
 public Runnable dbSaver = new Runnable() {

 @Override
 public void run() {
     saveToDbs();
 }

然而,发生的事情是立即调用活动 B 的 OnCreate(),但我的新活动应该去的屏幕空间是黑色的,直到 saveToDBs() 完成,在该阶段活动 B 被显示。有什么办法可以解决这个问题?TIA

4

2 回答 2

1

你误会HandlerThread

线程可以使用它Handler在另一个线程中运行一段代码(即更新 UI、通知进度等),而您需要的是一个新线程。

所以,你需要更换:

handler = new Handler();
handler.post(dbSaver);

经过:

new Thread(dbSaver).start();

问候。

于 2012-10-29T17:16:33.633 回答
0

我虽然我应该启动一个新线程来让数据库访问在后台运行

正确的。但是,您并没有在上面显示的代码中启动新线程。

于 2012-10-29T15:02:01.273 回答