【问题标题】:Prioritising new Activity优先考虑新活动
【发布时间】:2026-01-17 16:20:03
【问题描述】:

我有活动 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

【问题讨论】:

    标签: android multithreading android-activity


    【解决方案1】:

    您将Handler 误认为Thread

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

    所以,你需要替换:

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

    作者:

    new Thread(dbSaver).start();
    

    问候。

    【讨论】:

    • 辛苦了,我认为可运行的实现足以创建线程行为。
    【解决方案2】:

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

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

    【讨论】:

    • 好的,我已经接受了我开始的主题的答案,请告诉我秘密。
    • @user1654757:嗯,什么秘密?你还没有开始一个线程。为此,您可以使用Thread,或其他围绕线程的东西,例如AsyncTask