android程序的 main 函数在 ActivityThread 类里面
public static void main(String[] args) {
SamplingProfilerIntegration.start();
// CloseGuard defaults to true and can be quite spammy. We
// disable it here, but selectively enable it later (via
// StrictMode) on debug builds, but using DropBox, not logs.
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
// Set the reporter for event logging in libcore
EventLogger.setReporter(new EventLoggingReporter());
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
android启动时有3个线程,
main 函数所在线程是第一个线程,也是通常所说的UI线程。
ActivityThread 类有一个成员变量
final ApplicationThread mAppThread = new ApplicationThread(); // ApplicationThread 是 Binder 的子类
这是第二个线程。
第三个线程,据说是这里,但我没有跟踪到
public final class ViewRootImpl {
final W mWindow;
tatic class W extends IWindow.Stub { ... }
...}
public static void main(String[] args) {
SamplingProfilerIntegration.start();
// CloseGuard defaults to true and can be quite spammy. We
// disable it here, but selectively enable it later (via
// StrictMode) on debug builds, but using DropBox, not logs.
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
// Set the reporter for event logging in libcore
EventLogger.setReporter(new EventLoggingReporter());
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
android启动时有3个线程,
main 函数所在线程是第一个线程,也是通常所说的UI线程。
ActivityThread 类有一个成员变量
final ApplicationThread mAppThread = new ApplicationThread(); // ApplicationThread 是 Binder 的子类
这是第二个线程。
第三个线程,据说是这里,但我没有跟踪到
public final class ViewRootImpl {
final W mWindow;
tatic class W extends IWindow.Stub { ... }
...}
}
这三个线程是java vm上的,native上还有 gc 等好几个线程运行