如何在Android应用程序中正确实现android.os.Handler类而不是Timer?

发布于 2024-11-04 10:06:02 字数 1123 浏览 2 评论 0原文

所以我想在我的 Anroid 程序中实现 Timer,我发现更好的方法是使用 Handler 类。

首先,我决定使用 Handler 编写最简单的程序 - 文本在 1 秒后设置。我是 Android 的初学者,所以我在网上浏览了一些教程,尤其是 http://developer.android.com/resources/articles/timed-ui-updates.html ,但我的应用程序仍然显示错误(“应用程序 mTimer 已停止”)。

那么有人能指出我到底在哪里犯了错误吗?我将不胜感激,这是代码:


public class mTimer extends Activity {

    TextView tv;
    Button button1,button2;
    Handler mHandler;

    private Runnable myTask = new Runnable() {
           public void run() {

               tv.setText("text");

           }
        };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button1=(Button)findViewById(R.id.button1);
        tv=(TextView)findViewById(R.id.textView1);

 button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                mHandler.postDelayed(myTask, 100);
            }
        });


    }
}

So I wanted to implement Timer in my Anroid program and I found out the better way to do that is using Handler class.

First I decided to write the simplest program using Handler - the text is set after 1 second. I'm totall beginner in Android, so I went through some tutorials on web especially that one http://developer.android.com/resources/articles/timed-ui-updates.html , but still my application shows error ("application mTimer stopped").

So could anyone point out where exactly am I making mistake? I would be gratefull, here's the code:


public class mTimer extends Activity {

    TextView tv;
    Button button1,button2;
    Handler mHandler;

    private Runnable myTask = new Runnable() {
           public void run() {

               tv.setText("text");

           }
        };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button1=(Button)findViewById(R.id.button1);
        tv=(TextView)findViewById(R.id.textView1);

 button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                mHandler.postDelayed(myTask, 100);
            }
        });


    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一瞬间的火花 2024-11-11 10:06:02

您应该在 onCreate 方法中至少使用 mHandler = new Handler(); 之类的代码来初始化您的 Handler

请注意,myTask 任务将在 UI 线程上运行,因为您的处理程序是在

API Docs for Handler.postDelayed 中声明的:

可运行对象将在线程上运行
该处理程序附加到其上。

You should initialize your Handler in your onCreate method with at least a code like mHandler = new Handler();.

Note, that the myTask task will be run on the UI thread, since your handler is declared there

API Docs for Handler.postDelayed:

The runnable will be run on the thread
to which this handler is attached.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文