抱歉,我是个新手,但我在Java的Application类中创建了一个方法,运行一个具有复杂到中等算法的方法是否安全?这会对用户界面产生影响吗?
抱歉,我是个新手,但我在Java的Application类中创建了一个方法,运行一个具有复杂到中等算法的方法是否安全?这会对用户界面产生影响吗?
来自进程和线程 | Android Developers(重点是我的):
当应用程序组件启动且应用程序没有运行任何其他组件时,Android系统会为该应用程序启动一个新的Linux进程,其中只有一个执行线程。默认情况下,同一应用程序的所有组件在同一进程和线程中运行(称为“主”线程)。如果应用程序组件启动并且已经存在该应用程序的进程(因为该应用程序存在另一个组件),则在该进程中启动该组件并使用相同的执行线程。但是,您可以安排应用程序中的不同组件在单独的进程中运行,并且可以为任何进程创建其他线程。
以及:
系统不为每个组件实例创建单独的线程。在同一进程中运行的所有组件均在UI线程中实例化,并且对每个组件的系统调用从该线程分派。因此,响应系统回调的方法(例如onKeyDown()报告用户操作或生命周期回调方法)始终在进程的UI线程中运行。
因此,像Application
类中的onCreate
方法将在主(UI)线程上调用。
只有很少数的类会异步启动,例如IntentService。
是的,所有应用程序组件,从活动到广播接收器都在 UI 线程上运行。只有当您需要执行一些长时间获取任务、后台执行或网络获取时,才使用 AsyncTask 或 Intent Service 在单独的线程中进行操作,以免影响您的 UI 屏幕。
从复杂到中等的算法
如果它很复杂,你应该以异步方式运行它,使用Thread
、AsyncTask
、IntentService
或适合你的任何其他方式,但不要直接在Application
/Activity
/Fragment
/Service
的子类或运行在UI线程上。否则会拖慢应用程序的启动速度。