Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:如何使用计时器_Java_Android_Timer - Fatal编程技术网

Java 安卓:如何使用计时器

Java 安卓:如何使用计时器,java,android,timer,Java,Android,Timer,这是我的第一篇帖子 因此,我正在学习Android和Java(来自Actionscript),我正在从事一个项目,其中: 我正在尝试单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是一个攻丝游戏) 听起来很简单,对吧?我花了一整天的时间试图让一个标准的Java定时器/定时器任务工作。。不走运 有更好的办法吗?我的意思是,有没有一种Android特有的方式来做这样的事情?如果不是,那么理想的方式是什么 提前谢谢你们的帮助,伙计们! -g一种方法是创建管道线

这是我的第一篇帖子

因此,我正在学习Android和Java(来自Actionscript),我正在从事一个项目,其中:

我正在尝试单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是一个攻丝游戏)

听起来很简单,对吧?我花了一整天的时间试图让一个标准的Java定时器/定时器任务工作。。不走运

有更好的办法吗?我的意思是,有没有一种Android特有的方式来做这样的事情?如果不是,那么理想的方式是什么

提前谢谢你们的帮助,伙计们!
-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()类不可用而导致运行时错误。我也无法在自己的应用程序上运行这段代码;它只是不断地抛出一些错误。