Java 安卓:如何使用计时器
这是我的第一篇帖子 因此,我正在学习Android和Java(来自Actionscript),我正在从事一个项目,其中: 我正在尝试单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是一个攻丝游戏) 听起来很简单,对吧?我花了一整天的时间试图让一个标准的Java定时器/定时器任务工作。。不走运 有更好的办法吗?我的意思是,有没有一种Android特有的方式来做这样的事情?如果不是,那么理想的方式是什么 提前谢谢你们的帮助,伙计们!Java 安卓:如何使用计时器,java,android,timer,Java,Android,Timer,这是我的第一篇帖子 因此,我正在学习Android和Java(来自Actionscript),我正在从事一个项目,其中: 我正在尝试单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是一个攻丝游戏) 听起来很简单,对吧?我花了一整天的时间试图让一个标准的Java定时器/定时器任务工作。。不走运 有更好的办法吗?我的意思是,有没有一种Android特有的方式来做这样的事情?如果不是,那么理想的方式是什么 提前谢谢你们的帮助,伙计们! -g一种方法是创建管道线
-g一种方法是创建管道线程(带有Looper.prepare()的普通线程)。将延迟的消息发布到其消息循环。在消息处理程序中,交换图像。请参阅以下教程列表以了解所涉及的实体:
希望能有所帮助。这是我的Android定时器类,应该可以正常工作。它每秒发送一个信号。Change schedule()调用是指您需要不同的方案 请注意,您不能在计时器线程中更改Android gui内容,这只允许在主线程中进行。这就是为什么必须使用处理程序将控制权交还给主线程
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
import android.os.Message;
public class SystemTimerAndroid {
private final Timer clockTimer;
private class Task extends TimerTask {
public void run() {
timerHandler.sendEmptyMessage(0);
}
}
private final Handler timerHandler = new Handler() {
public void handleMessage (Message msg) {
// runs in context of the main thread
timerSignal();
}
};
private List<SystemTimerListener> clockListener = new ArrayList<SystemTimerListener>();
public SystemTimerAndroid() {
clockTimer = new Timer();
clockTimer.schedule(new Task(), 1000, 1000);
}
private void timerSignal() {
for(SystemTimerListener listener : clockListener)
listener.onSystemTimeSignal();
}
public void killTimer() {
clockTimer.cancel();
}
@Override
public void addListener(SystemTimerListener listener) {
clockListener.add(listener);
}
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.Timer;
导入java.util.TimerTask;
导入android.os.Handler;
导入android.os.Message;
公共类SystemTimerAndroid{
私人最终计时器;
私有类任务扩展TimerTask{
公开募捐{
timerHandler.sendEmptyMessage(0);
}
}
私有最终处理程序timerHandler=新处理程序(){
公共无效handleMessage(消息消息消息){
//在主线程的上下文中运行
timerSignal();
}
};
private List clockListener=new ArrayList();
公共系统TimeRandRoid(){
时钟定时器=新定时器();
时间表(新任务(),1000,1000);
}
私有void timerSignal(){
for(SystemTimerListener侦听器:时钟侦听器)
listener.onSystemTimeSignal();
}
公共无效计时器(){
clockTimer.cancel();
}
@凌驾
public void addListener(SystemTimerListener侦听器){
添加(监听器);
}
}
如果您发布一些您尝试过的代码片段,可能会有所帮助。您是否在Android应用程序中实际测试过这一点?schwiz在下面发布的链接说,当我将应用程序移植到使用Android SDK时,这段代码实际上是在Eclipse中编译的,但由于运行时Timer()类不可用而导致运行时错误。我也无法在自己的应用程序上运行这段代码;它只是不断地抛出一些错误。