【问题标题】:Schedule task in android在android中安排任务
【发布时间】:2014-02-16 03:42:47
【问题描述】:

我正在使用下面的代码在 android 中安排任务,但它没有给出任何结果。请提供相同的建议。

int delay = 5000; // delay for 5 sec.
int period = 1000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

   public void run() {
      Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
   }

}, delay, period);

【问题讨论】:

  • 想安排服务/活动开始或播出的朋友可以关注AlarmManager

标签: android


【解决方案1】:

TimerTasks 不适合在 android 环境中使用,因为它们不是上下文感知的。如果您的上下文消失,TimerTask 仍将在后台耐心等待,最终触发并可能导致您的应用程序崩溃,因为它的活动之前已完成。或者,它可能会在关闭后保留对您的活动的引用,从而防止它被垃圾收集并可能导致您的应用内存不足。

改为使用 postDelayed(),它会在 Activity 关闭时自动取消任务。

final int delay = 5000;
final int period = 1000;
final Runnable r = new Runnable() {
    public void run() {
        Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
        postDelayed(this, period);
    }
};

postDelayed(r, delay);

顺便说一句,如果您需要手动取消任务,可以使用removeCallbacks(r),其中 r 是您之前发布的可运行文件。

【讨论】:

    【解决方案2】:

    我得到了如下代码的答案:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Timer timer = new Timer();
    
        timer.schedule(new ScheduledTaskWithHandeler(), 5000);
    
    }
    
    final Handler handler = new Handler() {
    
       public void handleMessage(Message msg) {
           Toast.makeText(getApplicationContext(), "Run!",
               Toast.LENGTH_SHORT).show();
       }
    };
    
    class ScheduledTaskWithHandeler extends TimerTask {
    
        @Override
        public void run() {
            handler.sendEmptyMessage(0);
        }
    }
    

    【讨论】:

    • 请在任何View 上致电postDelayed()。没有Timer,没有TimerTask,没有额外的线程,也不需要Handler
    • @CommonsWare 如果您需要重复计时器怎么办??
    • @StarDust:再次致电postDelayed(),作为您与第一个postDelayed() 安排的Runnable 完成的工作的一部分:github.com/commonsguy/cw-omnibus/tree/master/Threads/…
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 2013-08-17
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2016-11-27
    • 2011-02-20
    相关资源
    最近更新 更多