应用程序类是在UI线程上运行还是?

dav*_*vid 9 java multithreading android

很抱歉作为一个新手,但我在java中的Application类中创建了一个方法,运行复杂到中等算法的方法是否安全?它会成为用户界面中的一个打嗝吗?

nha*_*man 9

来自进程和线程| Android开发者(强调我的):

当应用程序组件启动且应用程序没有运行任何其他组件时,Android系统会使用单个执行线程为应用程序启动新的Linux进程.默认情况下,同一应用程序的所有组件都在同一进程和线程(称为"主"线程)中运行.如果应用程序组件启动并且已存在该应用程序的进程(因为应用程序中存在另一个组件),则该组件将在该进程内启动并使用相同的执行线程.但是,您可以在应用程序中安排不同的组件在单独的进程中运行,并且可以为任何进程创建其他线程.

和:

系统不会为组件的每个实例创建单独的线程.在UI线程中实例化在同一进程中运行的所有组件,并从该线程调度对每个组件的系统调用.因此,响应系统回调的方法(例如onKeyDown()报告用户操作或生命周​​期回调方法)始终在进程的UI线程中运行.

所以,是的,类onCreate中的方法Application将在主(UI)线程上调用.

只有少数类以异步方式启动,例如IntentService.


Bla*_*elt 3

复杂到中等的算法

如果它很复杂,您应该以异步方式运行它,使用 a Thread、 an AsyncTask、 an或任何更适合您的方式,但不要直接在// 的子IntentService类或 UI 线程上运行的任何内容上运行它。否则它会减慢应用程序的启动速度。ApplicationActivityFragmentService