很抱歉作为一个新手,但我在java中的Application类中创建了一个方法,运行复杂到中等算法的方法是否安全?它会成为UI的打嗝吗?
答案 0 :(得分:9)
来自Processes and Threads | Android Developers(强调我的):
当应用程序组件启动且应用程序没有时 在运行任何其他组件时,Android系统启动一个新的Linux 具有单个执行线程的应用程序的进程。 按 默认情况下,同一应用程序的所有组件都在相同的位置运行 进程和线程(称为" main"线程)。如果是应用程序 组件启动,并且已经存在一个进程 应用程序(因为应用程序中的另一个组件存在), 然后组件在该过程中启动并使用相同的组件 执行的线程。但是,您可以安排不同的组件 在您的应用程序中运行在单独的进程中,您可以创建 任何进程的其他线程。
并且:
系统不会为每个a实例创建单独的线程 零件。 在同一进程中运行的所有组件都是 在UI线程中实例化,并对每个组件进行系统调用 从该线程调度。因此,响应的方法 系统回调(例如onKeyDown()报告用户操作或a 生命周期回调方法)总是在进程的UI线程中运行。
所以,是的,onCreate
类中的Application
等方法将在主(UI)线程上调用。
只有少数类以异步方式启动,例如IntentService。
答案 1 :(得分:3)
复杂到中等算法
如果它很复杂,你应该以异步方式运行它,使用Thread
,AsyncTask
,IntentService
或任何更适合你的方式,但不要直接在Application
/ Activity
/ Fragment
/ Service
的子类或UI线程上运行的任何子类上运行它。否则会降低启动应用程序的速度。
答案 2 :(得分:3)
是的,从活动到广播接收器的所有应用程序组件都在ui线程上运行,只有当您必须执行一些长读取任务或后台执行或网络提取时,才能使用asynctask或intent服务在单独的线程中执行此操作,以便它也没有扯下你的ui屏幕。