每分钟存储的数据应该使用Service, AsyncTask



我想在数据库中每分钟存储数据。同样的,我应该使用服务,AsyncTask或其他任何东西。我浏览了各种各样的链接,这让我更加困惑。

我阅读了开发人员指南并开始了解getWritableDatabase

数据库升级可能需要很长时间,你不应该从应用程序主线程调用这个方法,

然后首先我想我将使用AsyncTask然后关于这个

AsyncTasks应该理想地用于较短的操作(最多几秒钟)

之后我想我可以使用Service然后about Service

Service不是线程。它本身并不是在主线程之外完成工作的一种手段(以避免应用程序不响应错误)。

在这里我不能够理解我应该使用什么来定期存储数据在数据库中。我伤得很重,请帮帮我。

Thanks in advance

你不能在UI线程上做很多工作,所以做数据库操作你可以选择不同的方法,下面列出了我喜欢使用的一些方法;

    创建一个线程池,并通过一个线程执行每个数据库操作,这减少了UI线程的负载,也不会初始化很多线程。
  1. 您可以使用服务来更新数据库操作。由于服务运行在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;
}

这是一个简单的例子你可以这样做

最新更新