Android newbee tại đây, tôi có một số mã mà tôi muốn chạy khi ứng dụng Android của tôi khởi động lần đầu tiên. Nó kiểm tra phiên bản của cơ sở dữ liệu cục bộ và tải xuống phiên bản mới nếu phiên bản hiện tại đã lỗi thời. Tôi đã gắn bó với nó trong sự khởi đầu của hoạt động đầu tiên của tôi, khá chắc chắn phải có một nơi tốt hơn để đặt này. Bất kỳ khuyến nghị nào của một nơi nào đó tôi có thể đặt nó ở đâu nó sẽ được gọi một lần khi khởi động?Nơi để chèn mã để khởi động ứng dụng?
Trả lời
Bạn có thể viết một lớp Ứng dụng tùy chỉnh (mở rộng từ android.app.Application).Override onCreate
để xác định những gì sẽ xảy ra khi ứng dụng được bắt đầu:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Do something here.
}
}
Sau đó bạn sẽ cần phải đăng ký lớp tùy chỉnh của bạn trong file manifest:
<application ... android:name="fully.qualified.MyApplication">
Edit:
Trong phản ứng với David Cesarino, tôi không đồng ý với mục đích của lớp học Application
. Nếu bạn dựa vào số onCreate
của Activity
, thì điều gì sẽ ngăn không cho nó trở thành cùng một loại mục đích linh tinh khổng lồ ... nếu bạn cần điều gì đó xảy ra khi ứng dụng bắt đầu, bạn phải viết mã đó ở đâu đó; và Activity
có lẽ sẽ trở nên lộn xộn hơn bởi vì bạn cũng phải thực hiện Activity
logic cụ thể trong đó. Nếu bạn lo lắng về sự lộn xộn, sau đó tách logic thành các lớp khác và gọi chúng từ Application
. Sử dụng SharedPreferences
để xác định liệu logic có nên thực thi có vẻ giống như một vấn đề xung quanh một vấn đề đã được giải quyết hay không.
Dianne Hackborn dường như đề cập đến dữ liệu, chứ không phải logic, trong đó tôi hoàn toàn đồng ý. Các biến tĩnh là tốt hơn nhiều so với biến cấp ứng dụng ... tốt hơn phạm vi và loại an toàn làm cho khả năng bảo trì/dễ đọc dễ dàng hơn nhiều.
Rõ ràng, 'SharedPreferences' là một ví dụ cho câu hỏi không liên quan trong các bình luận (nó không phải là một phần của câu trả lời). Tôi không nói rằng bạn cần phải tồn tại phiên bản cơ sở dữ liệu (hoặc bất cứ điều gì) để 'SharedPreferences', vì nó đã" tồn tại "trong chính cơ sở dữ liệu (để sử dụng trong' onUpgrade', * ví dụ *). Về việc sử dụng lớp Ứng dụng để thực hiện kiểm tra cơ sở dữ liệu sớm, hãy đồng ý không đồng ý. Cảm ơn vi đa trả lơi. – davidcesarino
Đã hiểu, tôi không có ý định tập trung vào khía cạnh 'SharedPreferences' của nó, mà đúng hơn là yêu cầu nói: ' if (someCondition) { // Thực hiện điều gì đó. } ' Với tôi, đó là những gì' Ứng dụng' được tạo ra cho ... Tôi đoán nó chỉ là hai cách nhìn vào nó, và như bạn đã nói ... đồng ý không đồng ý. –
Đừng lo, không sao cả! :-) – davidcesarino
Trước tiên, hãy xem Activity lifecycle.
Trả lời câu hỏi của bạn, bạn có thể đặt mã vào bất kỳ phương pháp "khởi động" nào, tùy thuộc vào việc bạn muốn làm và chủ yếu là quan trọng, khi bạn muốn kích hoạt. Đối với những gì bạn đã yêu cầu, onCreate
là địa điểm hợp lý.
Tôi đã gắn bó nó trong quá trình khởi tạo hoạt động đầu tiên của mình, khá chắc chắn phải có một nơi tốt hơn để đặt điều này.
Và tại sao vậy? Bất kỳ mã nào có một mục nhập , phải không? Trong các hoạt động Android, nó chỉ xảy ra là onCreate
(một lần nữa, xem liên kết ở trên để biết chi tiết đầy đủ). Bên cạnh xử lý sự kiện, đó là câu trả lời cho các sự kiện xảy ra ngoài chuỗi cuộc gọi chính, bạn đặt nội dung trong số onCreate
.
Nếu bạn lo lắng về phương pháp trở nên lớn, thì đó là một vấn đề khác. Tóm tắt mã của bạn tốt hơn, tôi nói. Để kiểm tra nội dung sơ bộ, mọi người thường cung cấp hoạt động "Đang tải", trước khi bắt đầu hoạt động chính của ứng dụng.
chỉnh sửa:
Đây là một theo dõi những gì drumboog đề xuất, kể từ khi nhận xét của tôi bắt đầu phát triển về độ phức tạp là "chỉ một lời nhận xét".
Cá nhân, tôi muốn tránh việc mở rộng lớp Application
vì lý do duy nhất thực thi mã sớm, do đó, mã không phải là hợp lý ở mức độ ưu tiên (cơ sở dữ liệu phiên bản). Lớp Application
chủ yếu được sử dụng như một cách dễ dàng để trạng thái tạm dừng giữa các số Activity
', không phải là cách để "làm mọi thứ". Tóm lại, tôi cảm thấy lớp học Application
thường bị lạm dụng.
Đối với những gì bạn muốn, bạn hoàn toàn có thể đạt được mã gọi đó trong Activity
onCreate
. Điều đó làm giảm độ phức tạp, bởi vì tôi đã nhìn thấy mọi người nhồi nhét Application
cho đến khi nó trở thành một lớp lớn các mục đích mã linh tinh. Và đó là một không-không để bảo trì, với các vấn đề logic của riêng nó. Ngoài ra, nếu bạn thực sự muốn một giải pháp khác, hoàn toàn bị ngắt kết nối với giao diện người dùng, bạn nên suy nghĩ về việc triển khai một Service
thay vào đó (nhưng tôi không nghĩ rằng nó chỉ cần thiết cho điều đó).
Cả hai those concerns were previously addressed by Dianne Hackborn (hoặc thông tin tôi nhận được từ thư của cô ấy).
Và thậm chí như vậy, luôn có những cách tốt hơn để duy trì trạng thái (thống kê, vv). Tôi đã đếm trong các ngón tay của một bàn tay bao nhiêu lần tôi mở rộng lớp 'Application'. – davidcesarino
Cảm ơn bạn sẽ thử :) – tobylang
Bạn được chào đón. Vui lòng hỏi bất kỳ chi tiết nào khác. – davidcesarino
- 1. Nơi đặt mã khởi tạo trong ứng dụng ASP.Net MVC?
- 2. Nơi tốt nhất để chèn mã Google Analytics
- 3. Lập trình thêm ứng dụng Java để khởi động
- 4. Cocoa: Sandbox quyền để khởi động một ứng dụng khác
- 5. Đúng nơi để khởi tạo biến lớp?
- 6. Windows: Khởi động ứng dụng chậm
- 7. Ứng dụng WCF - cần mã "khởi động ứng dụng" cho cả liên kết http và tcp
- 8. Làm cách nào để khởi chạy ứng dụng khi khởi động hệ thống? (Mac OSX, Cocoa)
- 9. android nghe để khởi chạy ứng dụng
- 10. Khởi động lại ứng dụng trong Eclipse
- 11. Chạy ứng dụng khi khởi động
- 12. Lỗi khởi động ứng dụng Java EE
- 13. Cách khởi động ứng dụng facebook?
- 14. Khởi động lại ứng dụng bằng C#
- 15. Khởi động Android Market từ Ứng dụng
- 16. Khởi động lại ứng dụng Backbone
- 17. IIS: ứng dụng web khởi động
- 18. Làm thế nào để có được thời gian để ứng dụng khởi động?
- 19. Chạy ứng dụng C# trên Windows Khởi động
- 20. Android Khởi động lại ứng dụng
- 21. Cách khởi động/khởi chạy ứng dụng tại thời điểm khởi động Android
- 22. nơi để thay đổi màu sắc của statusbar trong khởi động khi Default.png được hiển thị
- 23. Shortcut để khởi động một hoạt động
- 24. làm thế nào để khởi động lại ứng dụng asp.net ngoài việc sửa đổi web.config
- 25. Nơi tốt nhất để đưa dữ liệu ứng dụng?
- 26. Khởi động lại ứng dụng Heroku tôi tự động
- 27. Tác vụ Ant để tự động khởi động máy chủ và ứng dụng của tôi
- 28. Tự động khởi động cho ứng dụng máy tính để bàn java?
- 29. Nơi tìm tệp khởi động twitter ít hơn?
- 30. Đăng ký tuyến động, cần khởi động lại ứng dụng?
Tại sao bạn nói phải có nơi tốt hơn để đặt mã khởi động? OnCreate() nên làm chính xác những gì bạn muốn .. – Snailer
Thực hiện một hoạt động màn hình tải và thêm mã kiểm tra phiên bản của bạn trong đó. –
Snailer Nếu tôi để lại mã trong hoạt động và sau đó tôi cần tạm ngưng hoặc tạo lại hoạt động thì mã đó được gọi đi lặp lại. – tobylang