2011-04-24 32 views
1

您好,感谢您提供以下问题的任何建议。我有一个简单的活动,显示一个AlertDialog。它工作正常,如果我在构造函数中实例化AlertDialog。但是,如果我移动AlertDialog另一种方法,一个由定时器事件触发的,什么也没有发生,我看不出有什么错误:Android:定时器触发的AlertDialog

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

使用的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); 
} 
+0

非常感谢,拯救了我的一天:) – nonozor 2013-04-25 15:37:01