Android:由Timer触发的AlertDialog

时间:2011-04-24 21:32:17

标签: android

您好,并提前感谢您提出以下问题的建议。我有一个显示AlertDialog的简单Activity。如果我在构造函数中实例化AlertDialog,它工作正常。但是,如果我将AlertDialog移动到另一个方法,一个由Timer事件触发的方法,没有任何反应,我看到没有错误:

public class RecipesPage extends Activity
{
    private WebView browser;
    private Timer timer = new Timer();

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recipes);

        browser = (WebView)findViewById(R.id.webkit);
        browser.getSettings().setJavaScriptEnabled(true);
        browser.loadUrl("file:///android_asset/html/index.html");

        TimerTask task=new TimerTask() {
            public void run() {
                notifyMe();
            }
        };
        timer.schedule(task, 10000);
    }

    private void notifyMe()
    {
        new AlertDialog.Builder(this)
        .setTitle("MessageDemo")
        .setMessage("eek!")
        .setNeutralButton("Close", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dlg, int sumthin) {
                // do nothing -- it will close on its own
            }
        })
        .show();
    }

}

1 个答案:

答案 0 :(得分:1)

使用Handler代替TimerTask - 它将在UI线程上运行您的Runnable

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recipes);

    browser = (WebView)findViewById(R.id.webkit);
    browser.getSettings().setJavaScriptEnabled(true);
    browser.loadUrl("file:///android_asset/html/index.html");

    Handler handler = new Handler();
    handler.postDelayed(
        new Runnable() {
            public void run() {
              notifyMe();
            }
        }, 10000L);
}