在我的方法中,我想调用另一个将在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以来,还有其他方法吗? 可以重复没有任何问题吗?
答案 0 :(得分:27)
有几种选择。但这是Android专用的。
如果你的帖子正在使用Looper
(通常是所有Activity
,BroadcastRecevier
和Service
的方法onCreate
,{{1从这样的线程调用},onReceive
等,然后你可以使用onDestroy
。这是一个例子:
Handler
请注意,您无需在此处取消任何内容。这将仅在您创建Handler的同一个线程上运行一次。
答案 1 :(得分:15)
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秒后更新用户界面。