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

时间:2015-05-22 07:00:07

标签: java android multithreading

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

3 个答案:

答案 0 :(得分:9)

来自Processes and Threads | Android Developers(强调我的):

  

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

并且:

  

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

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

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

答案 1 :(得分:3)

  

复杂到中等算法

如果它很复杂,你应该以异步方式运行它,使用ThreadAsyncTaskIntentService或任何更适合你的方式,但不要直接在Application / Activity / Fragment / Service的子类或UI线程上运行的任何子类上运行它。否则会降低启动应用程序的速度。

答案 2 :(得分:3)

是的,从活动到广播接收器的所有应用程序组件都在ui线程上运行,只有当您必须执行一些长读取任务或后台执行或网络提取时,才能使用asynctask或intent服务在单独的线程中执行此操作,以便它也没有扯下你的ui屏幕。