java - postdelayed Handler 不会重复运行

标签 java android android-handler postdelayed

我尝试运行此代码以从数据库中获取用户的状态。该过程包括 JSON,因此我创建了一个新类实现 Runnable 来充当后台服务。我确实创建了一个扩展服务的类。在该服务中我称之为线程。我使用处理程序并使用 postDelayed 来重复线程。

public int onStartCommand(Intent intent, int flags, final int startId) {

Toast.makeText(this,"SESSION START",Toast.LENGTH_SHORT).show();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        new Thread(new BackgroundThread(startId)).start();
    }
},1000);

return START_STICKY;
}

我相信我这里的代码是为了重复BackgroundThread.class实现Runnable

public class BackgroundThread implements Runnable {
int service_id;
int mark=-1;

public BackgroundThread(int service_id) {
    this.service_id=service_id;
}

@Override
public void run() {
    JSONData jsonData = new JSONData();
    if (jsonData.getJSONstring() == 1 && mark != 1) {
        Log.e("STATUS", "" + jsonData.getJSONstring());
        mark = 1;
    } else if (jsonData.getJSONstring() == 0 && mark != 0) {
        Log.e("STATUS", "" + jsonData.getJSONstring());
        mark = 0;
    }
    Log.d("RUNNING","RUNNING");
}
}

但是线程只发生一次

11-09 23:38:56.683    6483-6526/com.example.asus.intentservice I/OpenGLRenderer﹕ Initialized EGL, version 1.4
11-09 23:38:58.743    6483-6526/com.example.asus.intentservice V/RenderScript﹕ 0xa34ed000 Launching thread(s), CPUs 4
11-09 23:38:59.642    6483-6745/com.example.asus.intentservice W/System﹕ ClassLoader referenced unknown path: /system/framework/tcmclient.jar
11-09 23:38:59.968    6483-6745/com.example.asus.intentservice E/STATUS﹕ 0
11-09 23:38:59.968    6483-6745/com.example.asus.intentservice D/RUNNING﹕ RUNNING

我的代码有问题吗?或者也许有其他选择可以实现我的目的。但我更希望有人能帮助我修复我的代码。非常感谢

最佳答案

在更好地了解其他人解释的处理程序 postDelayed 后,我尝试寻找替代方案并尝试使用 Android run thread in service every X seconds 中的代码 它有效。 希望我的问题能帮助其他像我一样迷失的人 这是我的新代码

public int onStartCommand(Intent intent, int flags, final int startId) {

Toast.makeText(this,"SESSION START",Toast.LENGTH_SHORT).show();
    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            new Thread(new BackgroundThread(startId)).start();
        }
    },0,2, TimeUnit.SECONDS);
return START_STICKY;
}

关于java - postdelayed Handler 不会重复运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512200/

相关文章:

android - 使用 Android SDK 的随机访问文件 > 2GB

java - 如何从处理程序中删除所有回调?

java - 数组中的搜索和删除错误

java - 绘制多个自定义 View

java - 如何将文本设置为整数并获取 int 而不会出错

android - 华为 EMUI 4.0+ 上的电池优化(唤醒锁)

java - 从递归方法返回 boolean 值

android - 无法解析 android.support.design。迁移到 AndroidX 后

android try/catch 执行序列

Android: java.lang.NoSuchMethodError: Landroid\/os\/调用 FacebookSdk.sdkInitialize() 时的处理程序