2015-03-14 10 views
7

Tôi đang tạo ứng dụng kiểm tra vị trí của người dùng sau mỗi nửa giờ và cập nhật vị trí của người dùng trong cơ sở dữ liệu cục bộ và sau đó chạy các truy vấn CRUD dựa trên vị trí của người dùng ngay cả khi ứng dụng không chạy. Tôi phải làm nó như thế nào ?Quy trình nền để quét vị trí của người dùng theo khoảng thời gian đều đặn và cập nhật cơ sở dữ liệu cục bộ ngay cả khi ứng dụng không mở

Tôi đã đề cập đến bài viết này http://techtej.blogspot.com.es/2011/03/android-thread-constructspart-4.html và tôi vẫn còn nhầm lẫn về đó là cách tiếp cận chính xác cho kết quả của tôi?

Có 4 lựa chọn theo bài viết cho những gì tôi có ý định để đạt được theo tôi

1) Dịch vụ: Nhưng kể từ khi tôi cảm thấy nó sẽ là một hoạt động lâu dài với cơ sở dữ liệu địa phương, tôi cảm thấy tôi nên bỏ qua điều này một.

2) IntentService: Điều này không thể thực hiện nhiều nhiệm vụ, vì vậy tôi cảm thấy một điều này cũng nên tránh đối với tôi như tôi phải có được vị trí của người sử dụng và quét cơ sở dữ liệu, cập nhật cơ sở dữ liệu (3 nhiệm vụ)

3) Chủ đề: Tôi không chắc chắn làm thế nào để gọi điều này khi ứng dụng không mở

4) AsyncTask: Tôi không chắc chắn làm thế nào để gọi điều này khi ứng dụng không mở.

Về cơ bản, tôi đang tìm kiếm thứ gì đó giống như một công cụ CRON chạy trên cơ sở dữ liệu cục bộ trong khi làm việc trên dữ liệu vị trí.

Thật tuyệt vời nếu bạn có thể liên kết tôi với một số hướng dẫn và trả lời bằng một ví dụ đơn giản để làm cho tôi hiểu sự khác biệt của cả 4 phương pháp.

// ngồi biên tập trên 16 Tháng ba: Tôi đã đọc một cái gì đó về một JobScheduler được giới thiệu trong API 21, nhưng không chắc chắn nếu nó cũng hỗ trợ cho đến khi Gingerbread và là nó cách tiếp cận phù hợp với câu hỏi của tôi

Thanx

Trả lời

0

1. Tôi nghĩ cho yêu cầu này, Chủ đề và bên trong nó AsyncTask - cấu trúc này sẽ hữu ích.

Trong liên kết được cung cấp bởi bạn, nó được đề cập rất độc đáo here

2. Đối với vị trí liên quan đến blog, bạn có thể kiểm tra các tài liệu hữu ích ở đây:

(1) Difference between Google Map Distance and Directions API

(2) Check this answer also

Hy vọng điều này sẽ giúp bạn

1

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó tương tự như WakefulIntentService. Điều này xử lý tất cả các trường hợp của bạn hoàn toàn.

Bạn có thể thực hiện vị trí của mình và công việc liên quan đến db bên trong doWakefulWork() của việc triển khai đã nói.

3

Bạn đã cân nhắc sử dụng SyncAdapter chưa. Tốt nhất là lên kế hoạch công việc ở khoảng thời gian cố định và cũng được tối ưu hóa để sử dụng pin. Ngoài ra, một khi bắt đầu, nó có thể chạy độc lập với ứng dụng. Theo yêu cầu của bạn, tôi tin rằng điều này là phù hợp nhất cho nhu cầu của bạn. Bạn có thể đọc về điều này here.Điều này cũng loại bỏ trường hợp góc bắt đầu dịch vụ (thường được sử dụng) khi thiết bị của bạn được khởi động lại. Ứng dụng của bạn sẽ vẫn tiếp tục chạy công việc đã lên lịch ngay cả khi thiết bị được khởi động lại.

Trong SyncAdapter, bạn phải sử dụng Trình ContentProvider để bọc DB của bạn bên trong Trình ContentProvider. Ngoài ra, tốt nhất là sử dụng một CursorLoader để chạy các nhiệm vụ longrunning trên DB. Bạn nên đọc khoảng CursorLoader. Đây là một cách tuyệt vời để truy cập tài nguyên của bạn. Ngoài ra, bạn có thể xác định một mẫu thiết kế quan sát mà quan sát những thay đổi trong một DB và sẽ thực hiện một nhiệm vụ khi thay đổi được thực hiện trong DB. Điều này cũng có thể được sử dụng bên trong ứng dụng của bạn và cũng bên trong SyncAdapter. Trình tải con trỏ được ưu tiên nhất cho công việc nền trên DB. Bạn có thể thực hiện tất cả các hoạt động CRUD bằng cách sử dụng CursorLoader và ContentProvider.

3

này không thể thực hiện nhiều nhiệm vụ

Vâng, nó có thể. Nó chỉ có một luồng và vì vậy nó chỉ có thể thực hiện một tác vụ đồng thời.

tôi có để có được vị trí của người sử dụng và quét các cơ sở dữ liệu, cập nhật cơ sở dữ liệu (3 nhiệm vụ)

Tôi không có ý tưởng tại sao bạn nghĩ là ba nhiệm vụ. Bạn không thể làm cùng một lúc.

Vấn đề lớn hơn của bạn với IntentService là việc nhận dữ liệu vị trí không đồng bộ và IntentService không phù hợp để gọi các API không đồng bộ.

Nhưng kể từ khi tôi cảm thấy nó sẽ là một hoạt động lâu dài với cơ sở dữ liệu địa phương, tôi cảm thấy tôi nên bỏ qua điều này.

Các điểm đằng sau bất kỳ dịch vụ là dành cho "một hoạt động dài".

Về cơ bản tôi đang tìm kiếm một cái gì đó giống như một công việc định kỳ chạy trên một cơ sở dữ liệu địa phương trong khi làm việc trên các dữ liệu vị trí

Sử dụng AlarmManager để kích hoạt một WakefulBroadcastReceiver, mà sau đó gây nên một Service. Service, trong onStartCommand(), dơ một chuỗi nền tới (không đồng bộ) truy xuất vị trí và cập nhật cơ sở dữ liệu. Sau đó, Service có thể gọi completeWakefulIntent() trên WakefulBroadcastReceiver, cộng với stopSelf() với số startId nhận được trong onStartCommand() cho tác phẩm này, đồng thời cho phép luồng kết thúc. Nếu không có lệnh nào khác được nhận trong thời gian này, dịch vụ sẽ ngừng hoạt động.

+0

Bạn có thể vui lòng giúp tôi với cái này http://stackoverflow.com/questions/30300157/push-notifications-not-received-by-everyone –

+0

u có thể giúp tôi với http://stackoverflow.com này không/questions/30947115/cách thực hiện-hành động-thanh-như-google-maps –

4

Khi ghi vị trí người dùng sử dụng dịch vụ có thông báo. Chỉ vì mục đích tạo ra một ứng dụng có trách nhiệm về mặt đạo đức để thông báo cho người dùng rằng ứng dụng đang theo dõi họ. Dịch vụ theo định nghĩa chạy trong nền.

Nhà cung cấp vị trí hợp nhất với setinterval(long)30 minutes nhận khoảng thời gian. Đặt fastestInterval() thành một phút để nhận dữ liệu GPS khi các ứng dụng khác đang sử dụng GPS.

1

Tôi đã thực hiện những gì bạn đang tìm kiếm, cả với GPS và không có GPS.

Dự án Tôi mất điểm như nhìn chằm chằm cho các giải pháp phi-GPS đã làm tất cả bạn cần, và là pin thân thiện (tín dụng nên đến Kenton Price):

https://code.google.com/p/little-fluffy-location-library/

Hãy nhìn vào nó, nó hoạt động như một sự quyến rũ. Chỉ cần chạy nó trong bất kỳ thiết bị nào. Nếu bạn cần bất kỳ sự trợ giúp nào, hãy chỉ cho tôi biết.

Chỉ cần chỉnh sửa phương thức "onReceive" trong "TestBroadcastReceiver" để cập nhật DB của bạn.

Nếu bạn cần giải pháp GPS, hãy cho tôi biết, nhưng tôi đã bỏ nó để trở thành kẻ giết pin!

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan