当我们开发一个Android应用程序时,我们总是从onCreate()
主Activity的方法开始。很明显,在调用之前应该进行一些初始化onCreate()
。我的问题是:main
Android 应用程序的入口点(或方法)是什么?Dalvik VM 一开始会调用什么(即,当它完成自己的初始化,并将控制权转移给应用程序时)?我在哪里可以找到这个的代码main
?
问问题
25423 次
4 回答
9
正如金士顿所指出的,第一个“入口”点是应用程序类。
但是,获得第一个起点最简单的方法是在调试 onCreate 时检查堆栈。
你可以检查 Instrumentation,这听起来有点像你想要的。
http://developer.android.com/reference/android/app/Instrumentation.html
MainActivity.onCreate(Bundle) line: 12
Instrumentation.callActivityOnCreate(Activity, Bundle) line: 1047
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2627
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2679
ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125
ActivityThread$H.handleMessage(Message) line: 2033
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
于 2012-04-07T19:13:14.670 回答
6
您应该扩展 Application 类并覆盖 onCreate 方法。
供参考:应用类
于 2012-04-07T19:10:22.360 回答
1
我自己不知道,但这听起来是一个有趣的问题。这是触发新Activity
代码并遵循代码的代码,您将在 JNI 代码中结束
public void startActivityForResult(Intent intent, int requestCode) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
if (ar != null) {
mMainThread.sendActivityResult(
mToken, mEmbeddedID, requestCode, ar.getResultCode(),
ar.getResultData());
}
if (requestCode >= 0) {
// If this start is requesting a result, we can avoid making
// the activity visible until the result is received. Setting
// this code during onCreate(Bundle savedInstanceState) or onResume() will keep the
// activity hidden during this time, to avoid flickering.
// This can only be done when a result is requested because
// that guarantees we will get information back when the
// activity is finished, no matter what happens to it.
mStartedActivity = true;
}
} else {
mParent.startActivityFromChild(this, intent, requestCode);
}
}
Android 源代码是可用的,但获取它有点棘手,因为它的文档记录很差。您必须安装repo
然后下载该framework/base
项目
于 2012-04-07T19:27:16.300 回答
1
在核心 Java 程序中,我们需要一个 main() 方法,因为在执行字节码时,JVM(Java 虚拟机)将在类中搜索 main() 方法并开始在那里执行。
在 Android 中,(DVM)Dalvik 虚拟机旨在找到一个类,该类是 Activity 的子类,并设置为 LAUNCHER 以从其 onCreate() 方法开始执行应用程序,因此不需要main() 方法。
于 2017-01-18T12:59:11.443 回答