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

时间:2015-08-19 18:04:35

标签: database service android-asynctask

我希望每分钟都能将数据存储在数据库中。对于相同的我应该使用Service,AsyncTask或其他任何东西。我经历了各种各样的链接,这让我更加困惑。

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

  

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

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

  

理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)

之后我想我可以使用服务然后关于服务

  

服务不是线程。它本身不是从主线程开始工作的手段(以避免应用程序无响应错误)。

在这里,我无法理解应该使用什么来定期在数据库中存储数据。请严格帮助我。

提前致谢

1 个答案:

答案 0 :(得分:0)

你不能在UI线程上做很多工作,所以制作数据库操作你可以选择不同的方法,其中很少我喜欢使用的方法如下所示;

  1. 创建一个线程池并通过线程执行每个数据库操作,这减少了UI线程的负载,也从不初始化大量线程。
  2. 您可以使用服务更新数据库操作。由于在UI线程上运行的服务无法在服务中编写操作,因此您必须在服务方法中创建单独的线程。或者您可以直接使用Intent服务,因为它不适用于UI Thread。
  3. here是关于android

    中线程池的开发者文档

    this是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;
    }
    

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