2016-05-26 16 views
1

案例:對於我的應用程序的用戶即使他們無法訪問互聯網也能夠使用該應用程序,我將數據存儲在SQLite數據庫中。對於App的不同部分來獲取當前用戶數據,我使用Singleton。 像這樣;Android活動和異步SQLite通信優化

使用前獲取數據和存儲: 請求服務器=>數據包=> Singleton => SQLite數據庫。

用戶的數據顯示: 的SQLite DB => Java類=>辛格爾頓=>活動

通話將數據存儲到SQLite的DB:

DatabaseConductor dbc = new DatabaseConductor(getApplicationContext()); 
dbc.setReturnCue(MyActivity.this); 
dbc.execute(DataBaseActions.STUFF_SQL_IN); 

的DatabaseConductor是基本不這個:

public class DataBaseConductor extends AsyncTask<String, String, String> { 
    private Context context; 
    private DataBaseConductorCueing returnCue = null; 

    for (String message : params) { 
     Log.d("Doing in BG", message); 
     switch (message) { 
      case THING_TO_DO: 
       methodToActiallyDoStuff(); 
       break; 
} 

是的,DatabaseConductor和調用Activity都使用interfac e用於溝通的東西已經完成。像這樣:

public interface DataBaseConductorCueing { 
    void processFinish(String output); 
} 

現在我用公共靜態最終字符串來檢查需要做什麼,說實話,ENUM可能會更好。我希望這段代碼清楚地表明它是如何工作的。 有沒有其他的事情可以做到優化呢?

編輯1:整數更好,然後枚舉。

編輯2:接口的設計模式是一個回調接口,這樣你就不必註冊處理程序。

回答

1

好像訂閱dbc.setReturnCue(MyActivity.this);

如果不退訂,你會得到內存泄漏。

您提到過Singleton,但在代碼片段實例DatabaseConductor中。

AsyncTasks在單個後臺線程(來自API 11)上串行執行。如此長時間的跑步員可以阻止其他人。

你打多少次請求?你可以考慮使用服務。

公共靜態最終字符串來檢查需要做

你只有一個活動的客戶端是什麼?

你如何解決數據同步問題?

如果您真的關注優化,請不要使用enum

+0

Thanx的鏈接!並取消訂閱。而且,在代碼片段中沒有單例的例子。 – Flummox