2012-02-15 36 views
30

Tôi mới sử dụng Android và đang nghiên cứu khung công tác và tôi bắt buộc phải đặt câu hỏi này. Vì chúng tôi đang mở rộng Hoạt động trong Android, phải có main ở đâu đó trong Activity hoặc có một lớp ẩn mà Activity thực hiện có chứa main.Địa chỉ chính() trong Android ở đâu?

Tôi đã xem mọi nơi nhưng không thể tìm thấy. Tôi sẽ đánh giá cao nếu có ai có thể đưa ra một ý tưởng rõ ràng về nó.

Trả lời

12

Android sử dụng ngôn ngữ java nhưng thực thi bằng cách sử dụng mô hình thời gian chạy đã sửa đổi. Như những người khác đã nói, có một biểu hiện bao gồm trong mỗi gói. Điểm khởi chạy được chỉ định trong tệp kê khai này. Truy cập trang web android và thực hiện các hướng dẫn cơ bản. Điều này sẽ giúp bạn bắt đầu và chạy với sự hiểu biết về quy trình tạo/triển khai/chạy và vòng đời ứng dụng cơ bản.

2
onCreate() Method....See lifecycle of android class (Activity)..... 

http://developer.android.com/reference/android/app/Activity.html

+0

Tôi đánh giá cao câu trả lời của bạn nhưng nếu nó là một lớp java như thế nào mà nó không có chính và nó bắt đầu –

+0

Ứng dụng Android đầu tiên phải bắt đầu với Hoạt động (Lớp java nào mở rộng Hoạt động) ... Sau đó gọi oncreate đầu tiên –

2

Trong Android, hệ điều hành sử dụng máy ảo Dalvik. Điểm vào chính để thực thi ứng dụng được đóng gói trong khung công tác. Bạn có thể muốn xem qua "What is Android?"

Thực tế, mỗi Hoạt động trong Android có thể được coi là một ứng dụng duy nhất với một vòng đời của riêng nó.

+0

yes .... trừu tượng hơn. Tôi đánh giá cao câu trả lời của bạn nhưng nếu một lớp java của nó như thế nào là nó không có chính và nó bắt đầu. –

2

Bạn cho biết thiết bị nào sẽ chạy khi khởi động trong tệp kê khai. Không có chức năng main() vì không cần phải có. main() có thể là một quy ước được sử dụng cho các ứng dụng java "thông thường", nhưng nó không dành cho những thứ như các ứng dụng trình duyệt. Hệ thống tạo ra đối tượng hoạt động và gọi các phương thức bên trong nó, có thể hoặc không thể được gọi là chính. Trong trường hợp này, nó không phải.

onCreate khác với phương pháp main() và từ nhà xây dựng, ở chỗ nó có thể được gọi hai lần trên một hoạt động, chẳng hạn như nếu quá trình bị giết và người dùng điều hướng trở lại hoạt động. Xem this

Nhiều thứ mà bạn có thể nghĩ là "ứng dụng" Java không có phương thức main() riêng. Ví dụ, IIRC, servlet, WAR và các loại tương tự không có phương thức main() - phương thức main(), nếu có, nằm trong vùng chứa.

+0

Tôi đánh giá cao câu trả lời của bạn nhưng nếu nó là một lớp java như thế nào mà nó không có chính và nó bắt đầu –

49

Trong các chương trình Java lõi, chúng ta cần phương thức main(), bởi vì trong khi thực thi mã byte, JVM sẽ tìm kiếm phương thức main() trong lớp và bắt đầu thực hiện ở đó.

Trong trường hợp của Android, Máy ảo Dalvik được thiết kế để tìm một lớp là lớp con của Activity và được đặt làm LAUNCHER để bắt đầu thực hiện ứng dụng từ phương pháp onCreate() của nó, vì vậy không cần của phương thức main().

Để biết thêm thông tin, hãy xem vòng đời của Activity.

+1

vâng .. cảm ơn rằng một lời giải thích tốt –

+1

@BasimallaSebastin vui lòng chấp nhận điều này như là câu trả lời nếu điều này trả lời câu hỏi của bạn tốt nhất. – wvdz

+0

Giải thích của bạn mô tả cách Android quyết định 'Hoạt động' nào sẽ khởi chạy khi người dùng mở ứng dụng, nhưng điều này không liên quan gì đến quá trình khởi chạy khung ứng dụng cơ bản (thực sự khá phức tạp). Phương thức 'main()' nằm trong lớp khung android 'android.app.ActivityThread'. Phương thức này tạo ra Thread chính 'UI', thiết lập một' Looper' trên nó và bắt đầu vòng lặp sự kiện. Có các phần khác của khung công tác Android xử lý các quy trình khởi động/dừng OS, khởi chạy các ứng dụng và hoạt động và dịch vụ và các thành phần khác, v.v. –

7

đọc this blog entry để hiểu làm thế nào một ứng dụng Android bắt đầu:

Trong khi khởi động của hệ điều hành Android hạt nhân Linux đầu tiên gọi là quá trình "init". init đọc các tập tin "/init.rc" và "init.device.rc". "init.device.rc" là thiết bị cụ thể, trên thiết bị ảo, tệp này được gọi là "init.goldfish.rc".

init.rc bắt đầu quá trình "Zygote" qua chương trình "/ system/bin/app_process". Zygote tải các lớp Java cốt lõi và thực hiện xử lý ban đầu chúng. Các lớp này có thể được sử dụng lại bởi ứng dụng Android và do đó bước này giúp chúng nhanh hơn để bắt đầu . Một khi công việc ban đầu của Zygote được thực hiện, quá trình lắng nghe để một ổ cắm và chờ yêu cầu.

Nếu bạn nhìn vào lớp ZyogoteInit, bạn sẽ tìm thấy phương pháp chính.

Như những người khác đã đề cập, phương pháp main() này có liên quan đến việc thiết lập môi trường ứng dụng Android. Theo như một nhà phát triển có liên quan, điểm khởi đầu là phương pháp onCreate() của hoạt động Launcher.

4

Thực ra, phương pháp main() là lớp khung Android android.app.ActivityThread. Phương thức này tạo ra chính (UI) Thread cho một quá trình hệ điều hành, thiết lập Looper trên nó và bắt đầu vòng lặp sự kiện.

Khung Android chịu trách nhiệm tạo và hủy các quy trình hệ điều hành, khởi chạy ứng dụng, khởi động các hoạt động, dịch vụ và các thành phần khác. ActivityManager là một phần của khung công tác Android và chịu trách nhiệm điều phối và quản lý các thành phần khác nhau.

Kiến trúc của Android hơi khác một chút so với bạn có thể được sử dụng từ các ứng dụng Java độc lập. Sự khác biệt lớn nhất là tất cả các thành phần của bạn (Activity, Service, BroadcastReceiver, v.v.) không nhất thiết phải chạy trong cùng một quá trình hệ điều hành hoặc trong cùng một máy ảo (VM). Có thể có các thành phần từ một ứng dụng duy nhất chạy trong các tiến trình hệ điều hành khác nhau và nó cũng có thể có các thành phần từ các ứng dụng khác nhau đang chạy trong cùng một quá trình hệ điều hành. Trong Java truyền thống, phương thức main() là phương thức được gọi bởi máy ảo sau khi quá trình hệ điều hành đã được tạo và máy ảo đã hoàn tất quá trình khởi tạo của nó.

+2

Đó là câu trả lời đúng. –

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