2012-01-27 33 views
26

Mã này sẽ tự động chạy một ứng dụng sau khi khởi động hệ thống, nhưng ứng dụng sẽ đóng lại sau khi nhấn nút quay lại.Làm thế nào để chạy một ứng dụng Android trong nền?

Nếu ứng dụng chạy bình thường bằng cách nhấp vào biểu tượng đó. Nó sẽ liên tục chạy ngay cả sau khi nhấn nút quay lại hoặc chạy các ứng dụng khác.

public class AutoBoot extends BroadcastReceiver { 
    @Override   
    public void onReceive(Context context, Intent intent) {     
     Intent i = new Intent(context, MyActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i);   
    } 
} 

Câu hỏi của tôi là làm cách nào để mã chạy tự động này tiếp tục chạy ngay cả sau khi nhấn nút quay lại hoặc chạy các ứng dụng khác?

Trả lời

16

Có thể bạn có thể bắt đầu Service tại đây nếu bạn muốn Ứng dụng của mình chạy trong Nền. Đây là những gì Dịch vụ trong Android được sử dụng cho - chạy trong nền và thực hiện các hoạt động lâu năm.

UDPATE

Bạn có thể sử dụng START_STICKY để làm cho dịch vụ của bạn chạy liên tục.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

Làm thế nào để nó được dừng lại một cách nhanh chóng –

+0

Ngoài ra, làm cách nào để bắt đầu dịch vụ sau khi khởi động lại? –

3

như các ứng dụng chạy ở chế độ nền anyway. Tôi giả sử những gì bạn thực sự hỏi là làm thế nào để bạn làm cho các ứng dụng làm công cụ trong nền. Giải pháp bên dưới sẽ làm cho ứng dụng của bạn thực hiện công việc sau nền sau khi mở ứng dụng và sau khi hệ thống khởi động lại.

Dưới đây, tôi đã thêm một liên kết đến một ví dụ hoàn toàn làm việc (theo mẫu của một dự án Android Studio)

chủ đề này có vẻ là ra khỏi phạm vi của tài liệu Android, và không có không dường như là một tài liệu toàn diện về vấn đề này. Thông tin được trải rộng trên một vài tài liệu.

Các tài liệu sau đây cho bạn biết gián tiếp làm thế nào để làm điều này: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

Trong lợi ích của việc yêu cầu sử dụng của bạn đúng, một phần quan trọng của doc trên này để đọc cẩn thận là: #Binder, #Messenger và các thành phần liên kết bên dưới:

https://developer.android.com/guide/components/aidl.html

Đây là liên kết tới một ví dụ làm việc đầy đủ (ở định dạng Android Studio): http://developersfound.com/BackgroundServiceDemo.zip

Dự án này sẽ bắt đầu một Hoạt động mà liên kết với một dịch vụ; triển khai AIDL.

Dự án này cũng hữu ích để tái yếu tố cho mục đích IPC trên các ứng dụng khác nhau.

Dự án này cũng được phát triển để bắt đầu tự động khi khởi động lại Android (được cung cấp các ứng dụng đã được chạy ít nhất một sau khi cài đặt và ứng dụng không được cài đặt trên thẻ SD)

Khi ứng dụng này/dự án chạy sau khi khởi động lại, nó tự động sử dụng chế độ xem trong suốt để làm cho nó trông giống như không có ứng dụng nào đã bắt đầu nhưng dịch vụ của ứng dụng được liên kết bắt đầu một cách rõ ràng.

Mã này được viết theo cách dễ dàng tinh chỉnh để mô phỏng dịch vụ được lên lịch.

Dự án này được phát triển theo các tài liệu trên và sau đó là giải pháp sạch.

Tuy nhiên, một phần của dự án này không sạch sẽ: Tôi chưa tìm thấy cách khởi động dịch vụ khi khởi động lại mà không sử dụng Hoạt động. Nếu bất kỳ ai trong số các bạn đọc bài đăng này có một cách sạch sẽ để làm điều này, xin vui lòng gửi bình luận.

+0

cảm ơn - Tôi rất quan tâm đến việc học điều này. Tôi đã phát triển ứng dụng Android trong Android Studio trong gần 1 năm. Tôi đã tải xuống mã zip của bạn, đặt nó vào một thư mục, mở giám đốc đó trong Android Studio và khi xây dựng đã nhận được lỗi này. Lỗi: Đã xảy ra sự cố khi định cấu hình dự án ': ứng dụng'. > Không thể giải quyết tất cả các phụ thuộc cho cấu hình ': app: _debugApkCopy'. > Không thể tìm thấy com.android.support.constraint: constraint-layout: 1.0.2. Bắt buộc bởi: dự án: ứng dụng –

+0

Tôi đoán rằng một trong các bố cục của bạn đang sử dụng bố cục ràng buộc khi phụ thuộc bố cục ràng buộc không nằm trong tệp gradle của bạn. Nếu đây không phải là trường hợp thay đổi bố trí ràng buộc trong tệp bố cục của bạn thành bố cục thứ tự và nếu có bất kỳ thuộc tính nào trong bố cục liên quan đến bố cục hạn chế, hãy loại bỏ chúng. – user2288580

+0

Khi các phiên bản gradle mới xuất hiện, thường có sự cố di chuyển. Cách tốt nhất để giải quyết vấn đề này là tạo một dự án mới với cùng tên gói và di chuyển các tệp dự án một cách riêng biệt. Xin lỗi về sự bất tiện. Ứng dụng đã được kiểm tra kỹ lưỡng để nó hoạt động. – user2288580

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