gpt4 book ai didi

java - 使用 appcontext 从后台线程显示 AlertDialog

转载 作者:行者123 更新时间:2023-12-02 00:38:10 24 4
gpt4 key购买 nike

是否可以使用对 getApplicationContext() 的引用从后台线程引发 AlertDialog?

我正在尝试使用该代码,但它不起作用

    new Thread(){
public void run(){
new AlertDialog.Builder(appcontext)
.setMessage("Test")
.setPositiveButton("Ok", null)
.show();
}
}.start();

提前致谢

最佳答案

不,您不想这样做。 Android 不允许 UI 在除 UI 线程之外的任何线程上工作,因为 UI 代码不是线程安全的。请参阅“无痛线程”1 .

您可以从另一个线程调用Activity.runOnUiThread(Runnable)(在特定 Activity 上),以强制代码在 UI 线程上运行。您还可以调用 View.post(Runnable) (在特定 View 上)以使操作在 UI 线程上排队。有关这些选项和其他选项的更多详细信息,请参阅上述文章。

但是,Android 还提供了名为 AsyncTask 的东西,它专门设计用于在单独的线程上运行某些内容,以及在 UI 线程上运行某些内容。这会自动使用 Android 的线程池,如果您没有任何理由使用显式的单独线程,这是一种简单、干净的方法:

来自Android docs :

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
// Runs on a ThreadPool thread
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
// Sends data to onProgressUpdate to run on the UI thread
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}

// Runs on the UI thread!
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}

// Runs on the UI thread!
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}

关于java - 使用 appcontext 从后台线程显示 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199014/

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