如何使Handler始终运行,但在java中关闭应用程序
问题描述:
我想创建一个应用程序,可以在某种方法执行时自动更新。我使用Handler来自动更新时间。当时间到了,它会将数据更新到firebase。它可以在应用程序未关闭时工作。但是当我在指定的更新时间之前关闭应用程序时,处理程序不起作用。尽管我使用了可以使应用程序保持运行的服务。如何使Handler始终运行,但在java中关闭应用程序
到目前为止,这是我的代码:
AutoUpdate.java
public class AutoUpdate extends AppCompatActivity {
TextView textDateTime;
TextView textcurrentDateTime;
DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_update);
String currentDate = DateFormat.getDateTimeInstance().format(new Date());
textcurrentDateTime.setText(currentDate);
final Handler handler=new Handler();
final Runnable updateTask=new Runnable() {
@Override
public void run() {
updateCurrentTimeToFirebase();
handler.postDelayed(this,7000);
handler.removeCallbacks(this);
}
};
handler.postDelayed(updateTask,7000);
startService(new Intent(this, MyService.class));
}
public void updateCurrentTimeToFirebase() {
String currentDate = DateFormat.getDateTimeInstance().format(new Date());
mDatabase = FirebaseDatabase.getInstance().getReference();
String id = mDatabase.push().getKey();
mDatabase.child("autoUpdate").child(id).child("updateTime").setValue(currentDate);
}
}
Myservice.java
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}
请我需要你的帮助.. 三江源这么多..
答
您正在创建后台服务,但所有操作仍在进行g在前台活动仅
更改您的代码如下
AutoUpdate.class
public class AutoUpdate extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_update);
if (!isMyServiceRunning(MyService.class)) {
Intent intent = new Intent(AutoUpdate.this, MyService.class));
startService(intent);
}
}
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}
MyService.class
public class MyService extends Service {
TextView textDateTime;
TextView textcurrentDateTime;
DatabaseReference mDatabase;
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onDestroy() {
Log.d("destroy", "onDestroy");
}
@Override
public void onStart(Intent intent, int startid) {
//return super.onStartCommand(intent, flags, startId);
String currentDate = DateFormat.getDateTimeInstance().format(new Date());
mDatabase = FirebaseDatabase.getInstance().getReference();
textcurrentDateTime.setText(currentDate);
final Handler handler=new Handler();
final Runnable updateTask=new Runnable() {
@Override
public void run() {
updateCurrentTimeToFirebase();
handler.postDelayed(this,7000);
handler.removeCallbacks(this);
}
};
handler.postDelayed(updateTask,7000);
}
public void updateCurrentTimeToFirebase() {
String currentDate = DateFormat.getDateTimeInstance().format(new Date());
String id = mDatabase.push().getKey();
mDatabase.child("autoUpdate").child(id).child("updateTime").setValue(currentDate);
}
}
而不是使用处理器,使用后台服务运行所有的时间 –
检查我的onStartCommand()在服务使用onStart() –