Sau khi đọc hầu hết các tài liệu sẵn có trên các dịch vụ Android trên trang web của nhà phát triển và ở đây trong stackoverflow, tôi vẫn còn bối rối bởi một số khía cạnh của chạy một dịch vụ trong một nhiệm vụ riêng biệt. Hy vọng rằng ai đó có thể đưa tôi đi đúng hướng.Làm thế nào để bắt đầu nhiệm vụ nền chạy dài trong dịch vụ android
Hãy nói rằng chúng tôi có khuôn khổ dịch vụ trival như
public class HliService extends Service {
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If we get killed, after returning from here, restart
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// We don't provide binding, so return null
return null;
}
@Override
public void onDestroy() {
}
}
và trong biểu hiện, tôi có
<service android:name=".HliService" android:process=":HLI_Comms"/>
để dịch vụ chạy trong chủ đề riêng của mình.
Mục đích của dịch vụ là cung cấp tác vụ nền sẽ liên lạc với thiết bị bằng cách sử dụng ổ cắm TCP và thực hiện một số nội dung khác. Có nguy cơ bỏ qua các vấn đề về pin vv, về cơ bản tôi muốn nó chạy mãi mãi.
Something như
// Method that communicates using a TCP socket, and needs to send
// information back to the activity and receive messages from activity
// not shown here.
private void dummytask() {
boolean keepGoing = true;
while (keepGoing) {
// do useful stuff in here
// sets keepGoing false at some point
}
stopSelf();
}
cách tốt nhất để bắt đầu phương pháp này/nhiệm vụ là gì?
Tôi đã xem mã trong trang web dành cho nhà phát triển sử dụng trình xử lý tin nhắn và looper, mà tôi chỉ hiểu một phần, nhưng có vẻ rất phức tạp và có lẽ nhiều hơn tôi yêu cầu?
Tôi không tin tôi có thể gọi phương thức này từ onCreate()
hoặc onStartCommand()
kể từ đó sẽ không hoàn thành khi được gọi từ hệ thống? Tôi có nên bắt đầu nó với một bộ đếm thời gian hoặc báo động?
Tôi sẽ cần thêm trình xử lý tin nhắn để giao tiếp với hoạt động gui, nhưng vì tôi đang bắt đầu dịch vụ trong một chuỗi khác (theo hướng dẫn "quy trình"), tôi có cần sử dụng AIDL không ?
Tôi cũng đã xem xét việc sử dụng AysnchTask thay vì mở rộng Dịch vụ, nhưng có vẻ như phù hợp hơn với việc chạy tác vụ và sau đó chấm dứt.
'while (keepGoing)' - nếu điều này nằm trong một luồng khác so với chuỗi đặt 'keepGoing' thành false' keepGoing' PHẢI LÀ 'bay hơi' - hãy đọc trên mô hình bộ nhớ Java –
Vui lòng xem câu trả lời này có thể giúp bạn . [nhập liên kết mô tả ở đây] [1] [1]: http://stackoverflow.com/a/13783477/2165080 –