标签: timertask

如何暂停和恢复TimerTask/Timer

我的Android应用程序中有一个动画,它会闪烁TextView不同的颜色.我使用了TimerTask,Timer和Runnable方法来实现它.我需要做的是在用户在onPause()期间离开应用程序时停止线程,并在用户返回onResume()中的应用程序时恢复线程.以下是我实现的代码,但它不起作用(onPause()和onResume()件),我不明白为什么.我已经阅读了其他类似问题的其他帖子,但他们没有帮我弄清楚在我的情况下该怎么做.我已经读过TimerTasks已经过时了,我应该使用ExecutorService方法; 我不清楚如何实现这个功能.

   ...timerStep5 = new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                if (b5) {
                    cashButton2SignalText.setBackgroundColor(Color.RED);
                    cashButton2SignalText.setTextColor(Color.WHITE);
                    b5=false;
                } else {
                    cashButton2SignalText.setBackgroundColor(Color.WHITE);
                    cashButton2SignalText.setTextColor(Color.RED);
                    b5=true;
                }
                }
            });
        }
};

timer5.schedule(timerStep5,250,250);

}

public void onPause(){

    super.onPause();

    timerStep5.cancel();

}

public void onResume(){

    super.onResume();

    timerStep5.run();

}
Run Code Online (Sandbox Code Playgroud)

android timer onresume timertask onpause

18
推荐指数
2
解决办法
4万
查看次数

每5分钟后启动Android服务

我在网上搜索了最近2天,但我找不到任何有用的教程.我已经创建了一个服务,我在服务启动时在状态栏中发送通知.我希望该服务在显示通知后停止,并在5分钟后再次启动.如果有可能请告诉我,如果有的话,请给我一些有用的教程.我听说过,TimerTask并且AlarmManager我也尝试使用它们,但我无法获得理想的结果.

编辑:我需要每5分钟启动一次服务,即使我的应用程序没有运行.

service android alarmmanager timertask

16
推荐指数
2
解决办法
4万
查看次数

Swing的计时器中"quick"的含义是什么?

Java教程:

请注意,Swing计时器的任务是在事件派发线程中执行的.这意味着任务可以安全地操作组件,但这也意味着任务应该快速执行.如果任务可能需要一段时间才能执行,那么请考虑使用SwingWorker替代或替代计时器.

"快速"是什么意思?我的意思是不准确,不到一分钟很快或者什么?

例如,如果我想用一些面板制作动画(1分钟),通过移动它们,改变它们的透明度......并且用户只是看到面板而不能使用它们(没有我/ O),现在Timer是这种情况的好主意吗?

java swing timer timertask

14
推荐指数
3
解决办法
352
查看次数

应用程序崩溃与"从错误的线程异常调用"

我在我的onCreate()方法中添加了这部分代码,它崩溃了我的应用程序.需要帮忙.

logcat的:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread 
that created a view hierarchy can touch its views.
Run Code Online (Sandbox Code Playgroud)

码:

final TextView timerDisplayPanel = (TextView) findViewById(R.id.textView2);

    Timer t = new Timer();
    t.schedule(new TimerTask(){
        public void run(){
            timerInt++;
            Log.d("timer", "timer");
            timerDisplayPanel.setText("Time ="+ timerInt +"Sec");
        }
    },10, 1000);
Run Code Online (Sandbox Code Playgroud)

android handler timertask

12
推荐指数
1
解决办法
1万
查看次数

计时器已取消

我有两个定时器从FIFO队列管理输入(EN-队列)和输出(离队),但我不断收到的出队java.lang.IllegalStateException一个例外:计时器已经取消.我不能停止的地方,那里的错误声称发生线路83.我不知道我错过了什么,所以任何帮助,将不胜感激调试行.

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

/**
 * RunSim
 */
public class RunSim {
    private double arrivalRate = 600;
    private double y;
    private Timer t;
    private Timer t2;
    private Queue fifoQueue;
    private long xy;
    private long fact = 10;
    private int count;
    private int pId;

    public RunSim() {
        Random r = new Random();
        long n = System.currentTimeMillis();
        r.setSeed(n);
        double i = r.nextDouble();
        y = ((1 / arrivalRate) * (Math.log(i)));
        xy = (long) y;
        t = new Timer();
        t2 = …
Run Code Online (Sandbox Code Playgroud)

java multithreading timer timertask

12
推荐指数
1
解决办法
3万
查看次数

尝试调用虚方法

我正在尝试使用TimerTimerTask类创建一个简单的计时器.我一直收到以下错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

package com.austinheitmann.stopwatch;

import android.os.CountDownTimer;
import android.os.SystemClock;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;


public class MainActivity extends ActionBarActivity {

TextView timerf;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
timerf = (TextView) findViewById(R.id.timer);
}

int i=0;




TimerTask time = new TimerTask() {
    public void run() {
        i++;
        int …
Run Code Online (Sandbox Code Playgroud)

android timer timertask

12
推荐指数
1
解决办法
6万
查看次数

在Timer中调度Java TimerTask时,它是否已经"正在执行"?

我想澄清一下有关TimerTask的内容.如果您有以下代码:

timer.schedule(task, 60000);
Run Code Online (Sandbox Code Playgroud)

如果任务计划在接下来的1分钟内运行,那么任务对象是否已在执行?

因为在我的代码中某处我调用了task.cancel()但似乎调用并没有阻止

要执行的任务.我甚至记录了来自调用的返回值,它返回false.

当我阅读取消方法的文档时,我想到了我的问题:

取消TimerTask并将其从Timer的队列中删除.通常,如果调用没有阻止TimerTask至少运行一次,则返回false.后续调用无效.如果调用阻止了计划执行,则返回true,否则返回false.

我相信我在1分钟的延迟之前打电话给cancel().但是如何取消返回false,

是[任务]已经执行了吗?

希望你能给我提供线索/提示甚至解释.谢谢!

java timer timertask

11
推荐指数
1
解决办法
2万
查看次数

Java - Timer.cancel()v/s TimerTask.cancel()

在我的Android应用程序中,我运行一个计时器并在其他一些事件上取消它:

  class MyTimerTask extends TimerTask {
       override boolean cancel() {
         ...
       }

       override void run() {
         ...
       }
  }

  ...
  Timer t = new Timer();
  t.schedule(new MyTimerTask(),...)
  ...
  t.cancel();
Run Code Online (Sandbox Code Playgroud)

我期待t.cancel()能够自动调用MyTimerTaskcancel()方法.但是从不调用该方法.

我想知道这两种方法之间究竟有什么不同,以及为什么第二种方法不能自动调用.

java android timer timertask

11
推荐指数
1
解决办法
9151
查看次数

为什么从无限循环切换到TimerTask会导致CPU使用率下降?

我写了一个守护进程,结构如下:

while( true ) {
  // do some stuff
  Thread.sleep( 1000 );
}
Run Code Online (Sandbox Code Playgroud)

我注意到它使用了非常大量的CPU - 高达100%.我的生产服务器上有一个类似的守护进程已经有几个月存在相同的CPU问题了.

昨天我重构了使用TimerTask的代码.我立即注意到我的开发盒上的CPU使用率有所下降.所以我决定使用Munin部署到生产和双重检查.以下是图表:

负载平均值

CPU使用率

几点:

  • 除了JVM之外,生产服务器上绝对没有其他任何东西在运行.
  • 没有其他应用程序线程在运行
  • 它肯定是以正确的周期性间隔执行旧式代码 - 每次线程执行时我总是写入日志.

那么:与TimerTask相比,为什么Thread.sleep效率低下?

java cpu multithreading timertask

10
推荐指数
1
解决办法
1438
查看次数

手机屏幕锁定后,Android计时器嘀嗒嘀嗒

我有一个在一个方法中运行TimerTask的服务,它必须每秒计数并在一段时间后执行某些操作.我的服务正常工作,当我启动服务中的方法时,计时器开始每隔一秒(1000毫秒)打勾.问题是,当设备屏幕关闭时,我的计时器有时停止并且计数不正确.我可以在日志文件中看到计时器停止15秒,然后运行5秒,然后再次停止...当设备连接到计算机时,计时器始终正常工作,当我从计算机断开设备时会出现此问题.

这是我的服务:

public class MyService extends Service {
    private String TAG = getClass().getName();

    public void count() {

        Log.i(TAG, "Service Count Method Start");

        int counter;
        Timer mTimer = new Timer();

        mTimer.schedule(new TimerTask() {

            @Override
            public void run() {


                Log.i(TAG, "Timer count value : " + counter);

                if (!someCondition) {
                    counter++;
                    if (DefaultApplication.notOnDisplayTime >= 180) {
                        Log.d(TAG, "APPLICATION REACHED TIME LIMIT!");
                        someCondition = true;

                    } else
                                someCondition = false;
                } else {
                    counter = 0;
                }
            }
        }, 0, 1000);

    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

java service android timer timertask

9
推荐指数
1
解决办法
3337
查看次数