这是如何安排java方法在1秒后运行?

时间:2011-06-01 17:22:52

标签: java android

在我的方法中,我想调用另一个将在1秒后运行的方法。这就是我所拥有的。

final Timer timer = new Timer();

timer.schedule(new TimerTask() {
    public void run() {
          MyMethod();
          Log.w("General", "This has been called one second later");
        timer.cancel();
    }
}, 1000);

这是应该怎么做的? 自从我使用Android以来,还有其他方法吗? 可以重复没有任何问题吗?

4 个答案:

答案 0 :(得分:27)

有几种选择。但这是Android专用的。

如果你的帖子正在使用Looper(通常是所有ActivityBroadcastRecevierService的方法onCreate,{{1从这样的线程调用},onReceive等,然后你可以使用onDestroy。这是一个例子:

Handler

请注意,您无需在此处取消任何内容。这将仅在您创建Handler的同一个线程上运行一次。

答案 1 :(得分:15)

我建议使用ScheduledExecutorService

而不是Timer
final ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);

exec.schedule(new Runnable(){
    @Override
    public void run(){
        MyMethod();
    }
}, 1, TimeUnit.SECONDS);

答案 2 :(得分:1)

如果您在UI线程中,请考虑添加一个非常简单的:

try
{
  Thread.sleep( 1000 );
}//try
catch( Exception ex)
{ ex.printStackTrace(); }//catch

//call your method

答案 3 :(得分:1)

与UI相关的ScheduledExecutorService或AsyncTask。

请注意,如果要更新UI,则应将该代码发布到UI线程。与Processes and Threads指南

中一样
        final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
        mImageView.post(new Runnable() {
            public void run() {
                mImageView.setImageBitmap(bitmap);
            }
        });

postDelayed

中还有一个很好的View方法
    mImageView.postDelayed(new Runnable(){
        @Override
        public void run() {
            mImageView.setImageResource(R.drawable.ic_inactive);
        }
    }, 1000);

将在1秒后更新用户界面。