我想在数据库中每分钟存储数据。同样的,我应该使用服务,AsyncTask或其他任何东西。我浏览了各种各样的链接,这让我更加困惑。
我阅读了开发人员指南并开始了解getWritableDatabase
数据库升级可能需要很长时间,你不应该从应用程序主线程调用这个方法,
然后首先我想我将使用AsyncTask然后关于这个
AsyncTasks应该理想地用于较短的操作(最多几秒钟)
之后我想我可以使用Service然后about Service
Service不是线程。它本身并不是在主线程之外完成工作的一种手段(以避免应用程序不响应错误)。
在这里我不能够理解我应该使用什么来定期存储数据在数据库中。我伤得很重,请帮帮我。
Thanks in advance
你不能在UI线程上做很多工作,所以做数据库操作你可以选择不同的方法,下面列出了我喜欢使用的一些方法;
- 创建一个线程池,并通过一个线程执行每个数据库操作,这减少了UI线程的负载,也不会初始化很多线程。
- 您可以使用服务来更新数据库操作。由于服务运行在UI线程上,你不能在services中编写操作,所以你必须在service方法中创建一个单独的线程。或者你可以直接使用Intent service,因为它不在UI Thread上工作。
这里是android线程池的开发人员文档
这是IntentService的文档
这将每分钟向你的服务发送一个意图,而不使用任何处理器时间
Intent myIntent = new Intent(context, MyServiceReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 60); // first time
long frequency= 60 * 1000; // in ms
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), frequency, pendingIntent);
在此之前,检查是否真的需要每分钟启动一个服务。或者如果你有一个服务每分钟检查一次数据变化,那么启动一个新服务可能会比检查自己消耗更多的资源。
更新2
private ping() {
// periodic action here.
scheduleNext();
}
private scheduleNext() {
mHandler.postDelayed(new Runnable() {
public void run() { ping(); }
}, 60000);
}
int onStartCommand(Intent intent, int x, int y) {
mHandler = new android.os.Handler();
ping();
return STICKY;
}
这是一个简单的例子你可以这样做