我尝试运行此代码以从我的数据库中获取用户的状态。该过程包括JSON,因此我创建了一个新类,实现了Runnable作为后台服务。我确实创建了一个类扩展服务。在那个服务中我调用线程。我使用handler并使用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
我的代码有问题吗?或者也许有其他方法可以达到我的目的。但我更喜欢有人可以帮我修改我的代码。非常感谢
答案 0 :(得分:0)
在更好地了解其他人解释的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;
}