【问题标题】:What are lifecycles of threads started from: Activity , UI less Fragment , Service (started, binded)?线程的生命周期是从什么开始的:Activity、UI 少 Fragment、Service(已启动、已绑定)?
【发布时间】:2014-09-28 15:56:20
【问题描述】:

什么是线程的生命周期(例如,考虑一个播放音乐的线程):

  • 活动
  • UI 少片段
  • 服务(已启动、已绑定)

线程什么时候会被销毁? 何时为后台任务使用 Service 和 UI less Fragment?

【问题讨论】:

  • Thread 没有任何生命周期。你启动一个,然后它就一直运行,直到它不再有任何事情可做,或者直到操作系统杀死它。
  • 我的意思是“直到操作系统杀死它”。

标签: android multithreading android-fragments service


【解决方案1】:

Activity => 直到 android 杀死你的进程或你的线程的 run 方法返回。

UI less Fragment => 同上。

服务已启动 => 直到调用 stopSelfstopService 或您的线程的 run 方法返回。

binded => 直到所有客户端都解除绑定或者你的线程的 run 方法返回。

什么时候使用 Service 和 UI less Fragment 来处理后台任务?

Service => 长时间运行的操作,无论是否有任何 UI。

后台任务的 UI 少片段 => 这是一种设计模式,用于存储您的对象并防止在重新创建活动时创建另一个对象(或在您的上下文中另一个线程)。在此模式中,无论是否重新创建活动,您都可以访问您的线程引用。例如,如果您在 onCreate 方法中声明您的线程,如果您更改方向 5 次您创建 5 个不同的线程,这可能会导致内存泄漏。

以上所有情况一句话就是:

线程一直运行,直到 android 杀死进程或线程从其 run 方法返回。

【讨论】:

  • 是的,但是Service比Activity的优先级更高,所以主题正是从不同的android组件启动线程的区别。据我了解,片段与活动具有相同的优先级。
【解决方案2】:

线程什么时候销毁?

来自文档:

当一个应用程序组件启动并且该应用程序没有任何其他组件在运行时,Android 系统会为该应用程序启动一个新的 Linux 进程,并使用单线程执行。默认情况下,同一个应用程序的所有组件都运行在同一个进程和线程中(称为“主”线程)

...但是,您可以安排应用程序中的不同组件在单独的进程中运行,并且您可以为任何进程创建额外的线程。

当启动应用程序时,系统会为应用程序创建一个执行线程,称为“main”。这个线程非常重要,因为它负责将事件分派给适当的用户界面小部件,包括绘图事件。

由于上述单线程模型,不阻塞 UI 线程对应用程序 UI 的响应能力至关重要。如果您要执行的操作不是即时的,则应确保在单独的线程(“后台”或“工作”线程)中执行这些操作。

无论如何你应该阅读整个文档page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多