2010-12-29 35 views
5

Tôi đang cố viết một ứng dụng rất đơn giản sẽ chỉ thực hiện một thao tác không GUI đơn giản, sau đó hiển thị một tin nhắn ngắn (sử dụng bánh mì nướng, bật đầu những gì đã có trên màn hình, ví dụ như màn hình chính) và kết thúc. Đó là tất cả.cách hoàn toàn loại bỏ GUI của một hoạt động (tránh màn hình đen)

Điều này hầu như hoạt động, nhưng tôi vẫn nhận được một màn hình màu đen ngắn sau khi ứng dụng bắt đầu, sau đó quay lại màn hình chính và mọi thứ hoạt động như tôi dự định sau đó. Tôi nghĩ rằng không sử dụng setContentView trên hoạt động của tôi (do đó tước nó của một View) sẽ là đủ để tránh màn hình màu đen, nhưng nó vẫn bật lên. Xin lưu ý rằng (như được đề xuất trong câu hỏi liên quan), dịch vụ không phải là câu trả lời cho vấn đề của tôi. Tôi chỉ muốn một ứng dụng GUI-less (ngoại trừ một bánh mì nướng) chạy và kết thúc ngay lập tức. Cảm ơn :)

+1

Có thể sẽ hữu ích nếu bạn giải thích tại sao Dịch vụ không phải là câu trả lời cho vấn đề của bạn. Điều này nghe rất hướng dịch vụ. – Matt

+1

Đầu tiên, chính xác vì tôi không muốn quá trình của tôi tiếp tục chạy trong nền như các dịch vụ được dự định. Tôi muốn nhanh chóng và sạch sẽ nhập và thoát. Và thứ hai, tài liệu Android trực tiếp tuyên bố rằng các hoạt động không cần phải có giao diện người dùng, nhưng tôi đã không tìm ra cách để làm điều đó. (Câu trả lời 1 đã được giải quyết vấn đề của tôi) Cảm ơn anyway. – shutou

Trả lời

17

Trong <activity> sử dụng biểu hiện của bạn

android:theme="@android:style/Theme.NoDisplay" 

Chú giải này giả sử bạn sẽ gọi finish() trước khi trở về từ onResume(). Nếu bạn sẽ làm nhiều việc hơn sau đó (ví dụ nếu bạn sẽ làm bất kỳ mạng nào hoặc những thứ khác không thể thực hiện một cách nhanh chóng một cách đồng bộ), có thể bạn sẽ muốn bắt đầu một dịch vụ để xử lý công việc nền tảng mà quy trình của bạn sẽ tiếp tục chạy sau khi hoạt động kết thúc.

+0

Tuyệt vời! Đây chính xác là những gì tôi cần. Chính vì tôi không muốn quá trình của tôi tiếp tục chạy trong nền. Cảm ơn bạn! – shutou

+0

@shutou: Đây có lẽ là (mặc dù tôi không có ý tưởng) chi phí cao hơn việc bắt đầu một dịch vụ. Bạn không phải để dịch vụ tiếp tục chạy trong nền. Xem câu trả lời của tôi cho câu trả lời của tôi. – Falmarri

+0

Tôi đang sử dụng hoạt động nhập làm hoạt động của trình khởi chạy, vì hoạt động thực tế cần được xác định bởi một số logic (ví dụ: giới thiệu, đăng ký hoặc nội dung). Trước đó, hoạt động nhập cảnh cũng sẽ hiển thị, điều này thật khó chịu nhưng giờ nó đã biến mất! Cảm ơn – Meanman

-1

một dịch vụ không phải là câu trả lời cho vấn đề của tôi

Có nó là

+0

Được rồi, nó có thể là một cách khác để làm những gì tôi muốn, nhưng như đã thấy trong câu trả lời, có thể tắt hiển thị giao diện người dùng của ứng dụng. Và vì tôi không muốn các tiến trình nền chạy sau khi ứng dụng đơn giản của tôi được thực hiện, tôi đã tìm ra một dịch vụ có thể nhiều hơn những gì tôi cần. Tuy nhiên, tôi thừa nhận, tôi vẫn không biết đủ để chắc chắn liệu một dịch vụ có hiệu quả hơn giải pháp được đưa ra trong Câu trả lời 1 hay không, cho phép ứng dụng của tôi chỉ được thực hiện một hoạt động tối thiểu. hoặc chủ đề. Tôi có thể tìm hiểu thêm về các dịch vụ để xem xét ưu và khuyết điểm chi tiết hơn. Cảm ơn – shutou

+0

Dịch vụ không sinh ra thêm quy trình hoặc chủ đề. Một dịch vụ cơ bản là một hoạt động không có GUI. Tôi đã không kiểm tra kỹ mã nguồn, nhưng tôi sẽ gần như chính xác điều đó. Bạn không cần phải rời khỏi dịch vụ đang chạy. Trong thực tế, không làm điều đó. Chỉ cần bắt đầu dịch vụ, thực hiện công việc và sau đó gọi 'stopSelf() ' – Falmarri

0

Có vẻ như một công việc cho một IntentService. Bạn gửi nó một ý định, và nếu nó không chạy nó bắt đầu, sau đó nó xử lý tất cả các ý định nhận được, sau đó nó dừng lại. Ngắn và đơn giản.

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