android - 在android中安排任务

标签 android

我正在使用下面的代码在 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);

最佳答案

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

改为使用 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 是您之前发布的可运行对象。

关于android - 在android中安排任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2857101/

相关文章:

android - 将 build.gradle 迁移到 build.gradle.Kts : Not able to resolve Properties class

android - 如何确定是否已为 Cordova Apps 重新打开应用程序?

php - HttpURLConnection setRequestMethod 无法正常工作

java - Canvas 上的 Android Studio drawBitmap 不起作用

android - 找不到 id ... fragment PlaceholderFragment 的 View

android - Node : Callback is not a function - Email verification

android - PlaceAutocompleteFragment : automatically open SearchView

android - 如何运行mkv、flv、avi格式的视频文件?

android - 相机预览如何与最终图像输出相关联?

android - 测试时的 64k 限制 - Android