30/09/2018, 18:16

Khi nào thì nên fetch data từ server về?

Ứng dụng android của mình có sử dụng get data về từ server, hiện tại mình đang confuse về thời điểm nên get dữ liệu về.
Và đây là một số thời điểm theo mình nghĩ :

  1. Tạo một Splash Activity khi app khởi chạy, activity này sẽ đảm nhận việc việc fetch data từ server về, lưu vào database. Sau khi hoàn thành thì tự động đi vào giao diện chính của app và giờ ta có thể sử dụng data ở bất cứ activity nào bằng cách lấy dữ liệu đã lưu về từ SQLite hoặc SharePreference.
  2. Khi activity được mở, ta thực hiện fetch data từ bên trong hàm onCreate() .
  3. Dùng một AlarmManager để chỉ rõ bao lâu thì app nên update data, ví dụ 10 tiếng phải update một lần. (Cái này sẽ ảnh hưởng tới battery)
  4. Dùng SyncAdapter của Android, có điều cách cài đặt hơi phức tạp và dữ liệu phải được lưu dưới dạng Content Provider.
  5. Dùng Google Cloud Message để push notification từ server thông báo cho app biết rằng data đã mới và app cần update.

Mỗi trường hợp sẽ được áp dụng vào độ lớn của data và ngữ cảnh mà app hoạt động nhưng mình muốn được mọi người chia sẽ một cách cụ thể khi nào thì nên dùng cách này, khi nào nên dùng cách kia để mình có một cái nhìn sâu sắc hơn về vấn đề này. Cảm ơn!

Cả 5 cách đều không có ấn tượng về việc lúc nào nên dùng cái nào. Quan trọng là data mà bạn muốn lấy.

  1. Nếu data là cái cần thiết để chạy app thì dùng cái này. (Ví dụ auto login hoặc thông tin hiển thị ở màn hình first)
  2. Dữ liệu cần thiết phải được hiển thị trong màn hình này.
  3. Chẳng bao giờ dùng cách này luôn.
  4. Chưa nghĩ ra tại sao lại dùng cách này.
  5. Nếu có 1 triệu người dùng thì tiền đâu mà trả cho GCM?
Hnib viết 20:29 ngày 30/09/2018

i sao lại dùng cách này.

Theo như lời bạn comment thì bạn ko dùng cách 3, 4, 5. Vậy cho mình hỏi bạn thường làm cách nào để cập nhật data mới từ server về ?

Người dùng sẽ tự làm việc đó.
Nếu như đó là app cần real-time ví dụ như chat thì sẽ dùng socket hoặc kĩ thuật long session.
Nếu như đó là thông tin trực tiếp liên quan đến người dùng thì sẽ dùng GCM.
Nếu như đó là thông tin chung chung không cần real-time thì bao giờ người dùng refresh hoặc load more thì mới cập nhật dữ liệu.
=> Việc đều đặn gửi lên server để check vừa gây tốn tài nguyên vừa không real-time.

Hnib viết 20:28 ngày 30/09/2018

Nếu như đó là thông tin chung chung không cần real-time thì bao giờ người dùng refresh hoặc load more thì mới cập nhật dữ liệu.

Hiện tại mình đang focus vào cái data chung chung. Khi người dùng refresh là ý bạn là khi app được mở lại hoặc nhấn nút refresh (nếu UI có hỗ trợ) ? Còn load more là có phải bạn đang nhắc đến lazy loading ?

Chính là hắn. Nguyên tắc làm client của mình là cứ cái gì giảm tải được cho server thì mình làm. Ví dụ như cache, preload, blad blad…

Hnib viết 20:23 ngày 30/09/2018

Chính là hắn. Nguyên tắc làm client của mình là cứ cái gì giảm tải được cho server thì mình làm. Ví dụ như cache, preload, blad blad.

Nhờ bạn nói rõ thêm một tí về chỗ cache và preload được ko ?

Ví dụ ảnh load về rồi thì cache nó lại.
Vào màn hình user profile chẳng hạn thì load trước các thông tin cơ bản. Các bài post sẽ load sau.
Thực hiện pagging (Có thể gọi là lazyloading)

Võ Anh Kiệt viết 20:29 ngày 30/09/2018

Cách đơn giản nhất là khi fetch data lần nào , fetch thành công thì Save time vào SharePreference. Sau này cứ mở App lên check time nếu time hiện tại và time save dãn cách 10 tiếng thì fetch thêm lần nữa, vừa không chạy ngầm tác vụ vừa không xử lí nhiều qua các Dịch vụ

Bài liên quan
0