2015-08-19 17 views
1

我想每分鐘在數據庫中存儲數據。同樣的,我應該使用Service,AsyncTask或其他任何東西。我經歷了各種各樣的鏈接,這讓我更加困惑。在每分鐘存儲數據應該使用什麼服務,AsyncTask

我閱讀開發指南,來了解getWritableDatabase

數據庫升級可能需要很長的時間,你不應該首先從應用程序調用主線程這種方法,

然後我認爲我會使用AsyncTask然後關於這個

AsyncTasks應理想地用於短操作(最多幾秒鐘)。

後,我認爲我可以使用服務的話,大約服務

A服務是不是一個線程。它不是一種自己的方式來處理主線程(以避免應用程序不響應錯誤)。

在這裏,我無法理解什麼,我應該使用數據庫來存儲數據定期。請在這裏幫助我,因爲糟糕。

在此先感謝

回答

0

你不能做的UI線程上做了大量的工作,所以使得數據庫操作,你可以選擇不同的方法,他們幾個人,我更喜歡使用下面列出;

  1. 創建一個線程池並通過線程執行每個數據庫操作,這減少了UI線程的負載,並且它從不初始化大量線程。
  2. 您可以使用服務來更新數據庫操作。因爲在UI線程上運行的服務不能在Services中編寫操作,所以必須在服務方法內部創建一個單獨的線程。或者你可以直接使用Intent服務,因爲它不能在UI線程上工作。

here是在Android的

this線程池的開發者文檔,用於IntentService

文檔

UPDATE

這將意圖每分鐘發送給您的服務,而無需使用任何處理器時間在您的活動之間

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

這就像,你可以做

+0

....感謝其對我有很大的幫助一個簡單的例子...我會檢查這兩個.... 。我還有一個問題如果我使用Service,那麼我如何在每分鐘傳遞活動中的數據,因爲我正在獲取活動中的數據,然後存儲在數據庫中。 – Isha

+0

考慮接受答案,如果你滿意 – droidev

+0

你介意再詳述一下用例嗎? – droidev

相關問題