Android 每30秒调用一次的方法无效
我想每30秒更新一次用户位置,我正在使用截击请求和服务。 下面的代码是:Android 每30秒调用一次的方法无效,android,service,Android,Service,我想每30秒更新一次用户位置,我正在使用截击请求和服务。 下面的代码是: public class CarLocationUpdateService extends Service { Context context; long delay = 1000; // delay for 1 sec. long period = 10000; // repeat every 10 sec. @Nullable @Override public IB
public class CarLocationUpdateService extends Service {
Context context;
long delay = 1000; // delay for 1 sec.
long period = 10000; // repeat every 10 sec.
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context = this;
Handler ha=new Handler();
ha.postDelayed(new Runnable() {
@Override
public void run() {
//call function
CarLocationUpdateVolleyClass carLocationUpdateVolleyClass=new CarLocationUpdateVolleyClass(context);
carLocationUpdateVolleyClass.carLocationRequest();
}
}, delay);
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
将JobScheduler与firbaseJobDispatcher一起使用
您可以使用fused location service获取位置更新。我创建了一个获取位置更新的服务。此代码将在onLocationChanged方法中为您提供位置。 在这里查看我的答案试试这个:
mHandler = new Handler();
Runnable r = new Runnable() {
@override
public void run() {
f();
mHandler.postDelayed(this, 30000);
}
};
mHandler.postDelayed(r, 30000);
您必须在runnable中再次调用handler.postDelayed方法,因为它只执行一次,这是一种正常行为。将runnable与处理程序分开,如下所示:
Handler ha = new Handler();
private Runnable yourRunnable = new Runnable() {
@Override
public void run() {
CarLocationUpdateVolleyClass carLocationUpdateVolleyClass=new CarLocationUpdateVolleyClass(context);
carLocationUpdateVolleyClass.carLocationRequest();
ha.postDelayed(yourRunnable, 30000);
}
};
ha.post(yourRunnable);
顺便说一句,你的问题告诉我们大约30秒,但你只需每隔10秒打一次电话。试试这个,它很管用
public void doWork(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// This method will be executed once the timer is over
// insert your data to db here
// close this activity
doWork();
Toast.makeText(MainActivity.this, "LOL", Toast.LENGTH_SHORT).show();
}
}, TIME_OUT);
}
然后在onstart命令中简单调用此方法
300? 那不是30秒
public void doWork(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// This method will be executed once the timer is over
// insert your data to db here
// close this activity
doWork();
Toast.makeText(MainActivity.this, "LOL", Toast.LENGTH_SHORT).show();
}
}, TIME_OUT);
}
doWork();