2010-10-30 55 views
0

我希望你能帮助我:帮助,Handler类更新UI - Android电子

我需要更新我的UI Android应用程式,我尝试使用Handler类做到这一点,利用http://developer.android.com/resources/articles/timed-ui-updates.html以及使用Handlers作为指南的Android开发人员资源“Common Task”。

基本上,我需要两个之间的东西 - 定时更新的用户界面,但没有按钮。所以这里是我正在研究的相关代码。所有的帮助非常感谢。

public class Activity1 extends Activity { 

[...变量]

最终处理程序mHandler =新的处理程序();

final Runnable mUpdateResults = new Runnable() { 
    public void run() { 

     UpdateDisplay(); 
     mHandler.postDelayed(mUpdateResults, 200); 
    } 
}; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

[...]

startLongRunningOperation();

} 


protected void startLongRunningOperation() { 

    Thread t = new Thread() { 
     public void run() { 
      if (mStartTime == 0L) { 
       mStartTime = System.currentTimeMillis(); 
       mHandler.postDelayed(mUpdateResults, 200);} 
      mHandler.post(mUpdateResults); 
     } 
    }; 
    t.start(); 
} 

再次感谢!

+1

你的问题是什么? – CommonsWare 2010-10-30 19:32:14

回答

3

在Android上,最好使用AsyncTask在后台执行任务(逐渐更新),并使用此任务的结果更新UI。

编辑:

校验码后,我觉得你的处理程序正常工作。可能问题出在UpdateDisplay()。由于您正在更新来自后台线程的显示,请务必在完成View的更新后再致电[view.postInvalidate()][2]

+0

我的问题是,处理程序代码不会定期更新我的UI - 它只是显示我的UI没有更新。所以我需要知道我做错了什么。 谢谢你,彼得的建议 - 我现在正在研究你的建议。 – QueryMan 2010-10-30 19:56:15

+0

您的'UpdateDisplay()'是否定期被调用?如果是这样,Handler工作正常,问题必须在'UpdateDisplay()'内。在这种情况下,将代码发布到'UpdateDisplay()'。 – 2010-11-01 11:27:59

+0

提示:由于您正在更新后台线程显示,您需要在完成更新视图后调用view.postInvalidate()。 – 2010-11-01 11:29:56