2016-08-23 77 views
1

從那時起,我就想到了各個方向。但是,我沒有關於構建我的Android應用程序的最佳方式的想法。通過服務更新和通知JSON獲取請求的最佳方式

概念

我的申請獲得通過OkHttp3 JSON數組列表。響應之後,應用程序將該列表放在適配器的列表視圖中。我希望列表中的每個新項目都能通知我的用戶。我想在後臺編寫一個服務來通知我的用戶,即使應用程序不在了。

architecture my service

我需要一個服務,以保持通知的通量(如Facebook,Twitter)。

這是問題所在。那麼,如何正確地做到這一點?

我的物品類別

public class ItemDevis implements Serializable { 

private static final long serialVersionUID = 1L; 

private int id; 
private String name; 
private String description; 
private String picture; 
private int price; 
private int number; 
private int millesime; 
private int color; 
private int status; 

public ItemDevis(int id, String name, String description, 
    int number, int millesime, int color, int status, int price) { 
    this.id = id; 
    this.name = name; 
    this.millesime = millesime; 
    this.color = color; 
    this.description = description; 
    this.status = status; 
    this.number = number; 
    this.price = price; 
} 
} 

我的服務

public class NotifyService extends Service { 

    private NotificationManager mNM; 
    private int NOTIFICATION = R.string.notification; 
    private boolean isRunning = false; 
    static final int timer = 5000; 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     if (!isRunning) { 
      mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     mNM.cancel(NOTIFICATION); 
     isRunning = false; 
     Toast.makeText(this, "Service done", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     if (!isRunning) { 
      isRunning = true; 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        Log.d("DATA", "HTTP Request!"); 
        // Check, if new item -> update view (if application is ready) + notify. 
        handler.postDelayed(this, timer); 
       } 
      }, timer); 
     } 
     return START_STICKY; 
    } 
} 

你喜歡這種解決辦法?

enter image description here

我的問題

  • 我應該使用一個SQLite?
  • 我應該使用ContentProvider嗎?
  • SQLite在這種情況下效率更高嗎?
  • 我應該檢查我的模式嗎?

感謝您的幫助。

回答

0

有多種方式可以滿足您的要求。

  1. 做一個服務,一段時間後重復。當它得到一個新的數據存儲在數據庫,以及顯示通知(注意:是的,你必須存儲數據的地方)。

  2. 在您的服務器上實施GCM。每當添加新的東西時發送推送通知到你的設備接收端第一次存儲數據在數據庫然後檢查應用程序是否打開,然後只需更新視圖,否則生成通知。

注:沒有必要使用內容提供商

+0

你怎麼會不存在內容提供商和點N°1提及?您是如何在沒有內容提供商的情況下在服務和應用程序之間發送數據的?你能解釋關於解決方案1的更多細節嗎?不同解決方案之間的優缺點。 – Initerworker

+0

僅存儲來自服務的sqlite數據和來自sqlite的活動獲取數據。所以你不需要內容提供商 – Deepak

+0

但是,我讀這種方法有更多的延遲。因爲從sqlite獲取數據比獲取內容提供者更慢,對嗎?謝謝你的幫助人。 – Initerworker