微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 定期执行动作的最佳方式[正在运行应用程序] – 处理程序?

我试图定期执行一个动作.我想创建一个类的新实例,比如说,3秒.最好通过使用Handler或Thread实现这一点吗?有没有一种更容易,多样的方式我可以尝试?我真的不善于使用线程 – 我想学习,但更重要的是让我在这功能之前,担心好的编程实践.
new Thread(){
        public void run(){
            //makes sure the player still has 3 lives left
            while(game == false){
                uiCallback.sendEmptyMessage(0);
                try {
                    Thread.sleep(2000); // wait two seconds before drawing the next flower
                } catch (InterruptedException e) {
                    // Todo Auto-generated catch block
                    e.printstacktrace();
                } //sleep for 2 seconds
            }
        }
    }.start();

解决方法

我在Android应用程序中做类似的事情我每10秒在我的界面更新一些数据.有很多方法可以做到这一点,但是我选择使用Handler,因为它很简单:
Thread timer = new Thread() {
    public void run () {
        for (;;) {
            // do stuff in a separate thread
            uiCallback.sendEmptyMessage(0);
            Thread.sleep(3000);    // sleep for 3 seconds
        }
    }
});
timer.start();
...
private Handler uiCallback = new Handler () {
    public void handleMessage (Message msg) {
        // do stuff with UI
    }
};

您可能知道,您不能在UI线程中运行这样的定期功能,因为它会阻止UI.这将创建一个新的线程,在完成后向UI发送消息,因此您可以使用定期功能的新结果更新UI.

如果您不需要使用此周期函数的结果来更新UI,则可以简单地忽略我的代码示例的后半部分,并且只会生成一个新线程,如图所示.但是,请注意:如果您要修改此新线程和UI共享的变量,那么如果不同步,则会遇到问题.一般来说,线程不是您想要忽略“良好的编程实践”的领域,因为您会收到奇怪的,不可预知的错误,您将会诅咒您的程序.

-tjw

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐