在 Android 平台上,界面元素不能在定时器的响应函数里刷新。
以下这段代码中,mButton 的文本并不变化。
public class AndroidTimerDemo extends Activity {
private Button mButton;
private Timer mTimer;
private TimerTask mTimerTask;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.Button01);
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
Log.d("AndroidTimerDemo", "timer");
Calendar cal = Calendar.getInstance();
mButton.setText(cal.toString());
}
};
mTimer.schedule(mTimerTask, 1000, 1000);
}
}
在 Android 平台上,UI 单元必须在 Activity 的 context 里刷新。 为了达到想要的效果,可以使用 Message Handler。在定时器响应函数里发送条消息,在 Activity 里响应消息并更新文本。
public class AndroidTimerDemo extends Activity {
protected static final int UPDATE_TEXT = 0;
private Button mButton;
private Timer mTimer;
private TimerTask mTimerTask;
private Handler mHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.Button01);
mTimer = new Timer();
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case UPDATE_TEXT:
Calendar cal = Calendar.getInstance();
mButton.setText(cal.toString());
break;
}
}
};
mTimerTask = new TimerTask() {
@Override
public void run() {
Log.d("AndroidTimerDemo", "timer");
mHandler.sendEmptyMessage(UPDATE_TEXT);
/*
// It doesn't work updating the UI inside a timer.
Calendar cal = Calendar.getInstance();
mButton.setText(cal.toString());
*/
}
};
mTimer.schedule(mTimerTask, 1000, 1000);
}
}
分享到:
相关推荐
在Android中,View是用户界面的基本构建块,它可以是屏幕上的一个按钮、文本框,也可以是我们自定义的复杂图形。为了绘制动态曲线图,我们需要创建一个继承自View的类,然后重写onDraw()方法。在这个方法中,我们将...
在Android平台上实现贪吃蛇游戏,主要涉及到的是图形界面的绘制、事件处理以及游戏逻辑的控制。以下我们将围绕《贪吃蛇游戏安卓源代码.docx》中的关键类`SnakeView`进行深入解析。 `SnakeView`是这个游戏的核心类,...
在Android或iOS平台上,我们可以使用布局语言(如XML或Storyboard)来设计时钟的外观,然后通过编程语言控制时钟指针的转动。在JavaFX或Qt等桌面应用框架中,我们可以直接在代码中绘制时钟的各个部分,比如数字、...
通过掌握这些知识点,开发者可以更好地利用OpenGL和freeglut库来创建高质量的图形界面,并在Windows、Linux以及现在支持的Android平台上进行跨平台开发。需要注意的是,尽管freeglut提供了便利和易用性,但在实际...
最后,在移动应用开发方面,要求学生选择Android、Windows Phone、iOS中的一个平台进行应用开发。基础任务包括开发一个简单的计算器应用,并能进行基本的加减乘除运算。进阶任务可能包括实现多个数的运算、本地化、...
定时器会定期执行回调函数,用于更新界面中的倒计时显示。 3. **用户界面(UI)更新**:为了给用户提供实时反馈,倒计时需要在界面上动态更新。这涉及到了UI组件的绑定和数据同步,比如Android的`TextView`的文本...
在Android应用开发的世界里,Jetpack Compose是Google推出的一个现代化的UI工具包,它让开发者能够使用Kotlin语言来声明式地构建用户界面。这个项目“JetpackComposeTimer”显然是一个利用Jetpack Compose技术实现的...
自定义控件通常是在Android的`View`或`ViewGroup`基础上进行扩展,创建一个新类,并重写其必要的方法,如`onDraw()`用于绘制控件内容,`onMeasure()`用于确定控件大小,以及`onLayout()`用于布局定位。在这个例子中...
在编程中,计时器通常通过定时器类或接口实现,例如在Java中可以使用`java.util.Timer`和`java.util.TimerTask`,或者在JavaScript中使用`setInterval`和`setTimeout`函数。计时器可以设置特定时间后触发事件,如...
事件处理机制是驱动程序中一个至关重要的部分,它确保了系统能够及时响应网络和用户界面的各种交互。 首先,事件是通过`ril_event_loop`中的多路复用I/O进行管理的。`ril_event_set`函数负责配置事件,它有两种主要...
它提供了跨平台的API,使得开发者可以编写一次代码,在Windows、Linux、Mac OS X及Android等平台上运行。 2. **窗口管理**:在SDL2.0中,通过`SDL_CreateWindow`函数创建窗口,`SDL_DestroyWindow`来销毁。你可以...
在Android中,滑动按钮的绘制主要通过`OnDraw`方法实现,开发者可以自定义函数并传入`Canvas`对象进行绘制。而在Qt中,绘图工作则发生在`paintEvent`函数中。`paintEvent`是Qt的图形视图框架中的关键事件,用于响应...
4. **实时更新**:top命令能够实时刷新显示,这意味着它需要在不阻塞用户界面的情况下定期收集和处理数据。这涉及到异步编程和定时器的使用。 5. **用户交互**:top命令提供了丰富的交互功能,如排序、筛选、统计等...
在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端...
React Native使用Flexbox布局系统,帮助开发者创建响应式的跨平台界面。在`App.js`及`components`目录下的文件中,可以看到如何使用React组件来构建用户界面。例如,可能会有一个`WeatherCard`组件,用于显示温度、...