gpt4 book ai didi

android - 如何进行阻塞和同步 Activity ?

转载 作者:行者123 更新时间:2023-11-29 14:22:19 24 4
gpt4 key购买 nike

好吧,请不要问我为什么,但我需要启动一个同步和阻塞的 Activity,以便程序流在完成之前不会继续。我知道如何进行同步对话,但如何进行同步 Activity ?

以下是我尝试但失败的两种方法:

// In the 1st activity, start the 2nd activity in the usual way
startActivity(intent);
Looper.loop(); // but pause the program here
// Program continuse running afer Looper.loop() returns
....

// Then, in the second activity's onBackPressed method:
public void onBackPressed() {
// I was hoping the following quit() will terminate the loop() call in
// the first activity. But it caused an exception "Main thread not allowed
// to quit." Understandable.
new Hanlder().getLooper().quit();
}

我还尝试使用另一个线程来实现这一点:

// In the first activity, start a thread
SecondThread m2ndThread = new SecondThread(this);
Thread th = new Thread(m2ndThread, "Second Thread");
th.run();
synchronized(m2ndThread) {
m2ndThread.wait();
}

class SecondThread implements Runnable {

Activity m1stActivity;

SecondThread(Activity a) {
m1stActivity = a;
}

public void run() {
Looper.prepare();
Handler h = new Handler() {
public void handleMessage() {
Intent intent = new Intent(m1stActivity, SecondActivity.class);
m1stActivity.startActivity(intent); // !!!!!!!!!!!!!!
}
}
h.sendEmptyMessage(10); // let it run
Looper.quit();
}
}

但是,这种方法不起作用,因为当我使用第一个 Activity 启动第二个 Activity 时,主线程已经处于等待状态并且什么都不做。所以第二个 Activity 甚至没有被创建。 (这很讽刺:你必须使用一个 Activity 来启动一个 Activity ,但是当它已经处于等待状态时你怎么能这样做呢?)

最佳答案

你不能。

仅此而已。你就是不能这样做。 Activity 始终在主线程上执行。您的主线程必须主动运行其事件循环。阻塞主线程的事件循环总是被破坏。总是。

关于android - 如何进行阻塞和同步 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5843657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com