来自计时器线程的Android显示AlertDialog
我有一个从计时器开始的后台线程。该线程每60秒运行一次,可能检测到需要立即退出应用程序的致命问题。在退出之前,我想显示一个警报对话框。因为线程每60秒运行一次,所以我无法知道当前正在运行哪个活动。如果没有活动,我无法调用runOnUiThread来显示警报对话框。下面是一些代码,可以说明我要做的事情。在不知道当前活动的情况下,如何在UI线程上显示AlertDialog来自计时器线程的Android显示AlertDialog,android,multithreading,android-alertdialog,Android,Multithreading,Android Alertdialog,我有一个从计时器开始的后台线程。该线程每60秒运行一次,可能检测到需要立即退出应用程序的致命问题。在退出之前,我想显示一个警报对话框。因为线程每60秒运行一次,所以我无法知道当前正在运行哪个活动。如果没有活动,我无法调用runOnUiThread来显示警报对话框。下面是一些代码,可以说明我要做的事情。在不知道当前活动的情况下,如何在UI线程上显示AlertDialog public class Foo { private Timer mTimer; public void sta
public class Foo {
private Timer mTimer;
public void startRefresh() {
if (mTimer == null) {
mTimer = new Timer(true);
mTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
boolean succeeded = true;
// Do something that fails
succeeded = false;
if (!succeeded) {
// Display alert dialog on UI thread before exiting application
}
}
}, 60000, 60000);
}
}
}
将活动上下文传递给Foo构造函数
public class Foo {
Context mContext;
// constructor
public Foo(Context context){
this.mContext = context;
}
...
if (!succeeded) {
// Display alert dialog on UI thread before exiting application
}
}
public void displayAlert(Context context){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
alertDialog.setTitle("Display alert");
alertDialog.setMessage("My Alerts");
// Showing Alert Message
alertDialog.show();
}
编辑
什么活动?整个问题在于开始的活动 检测到错误时,计时器可能不是当前活动 然后不要使用构造函数,而是使用getApplicationContext: 公共抽象上下文getApplicationContext API级别1中添加的返回单个全局 当前进程的应用程序对象。这通常应该仅限于 如果您需要一个生命周期与 当前上下文,它与流程的生命周期相关,而不是 而不是当前组件
什么活动?整个问题是,当检测到错误时,启动计时器的活动可能不是当前的活动。仍然有一块拼图缺失。无法从工作线程显示警报对话框;它必须显示在UI线程上。我不知道如何使用上下文在UI线程上运行某些东西。我是否错过了该类或任何其他类中的某些方法?@hairofdog是的,你是对的,你需要在runonuith中运行它阅读我的帖子只是试图快速回答你的问题
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your dialog code.
}
});