【发布时间】:2018-05-11 17:17:04
【问题描述】:
我对 android 应用程序上的活动和线程之间的区别感到困惑。那么一个活动是否像一个独立的线程?如果是这样,多个活动可以在多线程应用程序中同时运行吗?
谢谢
【问题讨论】:
-
每个 UI 对象、活动、服务、广播接收器都在主线程中运行。
我对 android 应用程序上的活动和线程之间的区别感到困惑。那么一个活动是否像一个独立的线程?如果是这样,多个活动可以在多线程应用程序中同时运行吗?
谢谢
【问题讨论】:
我相信您之前可能已经阅读过What is an Activity? 的文档。如果没有,那么请做。在这里你可以阅读更多关于process and threads 在android 中的信息。现在,回答您的问题:
一个activity是否是一个独立的线程?
每个活动都不是一个独立的线程。正如 cmets 中提到的@android.h,所有活动都在同一个UI thread 上运行。
作为多线程应用程序可以同时运行多个活动吗?
如上所述,所有活动、服务、内容提供程序、广播接收器等都在 UI 线程上运行。话虽如此,您可以从一个活动本身中启动多个线程。因此,您的应用程序可以使用多个线程,但运行多个活动不会使其成为多线程。
关于多项活动,您可能会阅读Tasks and Back Stack 文档。它强调了多项活动的概念:
An application usually consists of multiple activities that are loosely bound to each other. Typically, one activity in an application is specified as the "main" activity, which is presented to the user when launching the application for the first time. Each activity can then start another activity in order to perform different actions. Each time a new activity starts, the previous activity is stopped, but the system preserves the activity in a stack (the "back stack"). When a new activity starts, it is pushed onto the back stack and takes user focus. The back stack abides to the basic "last in, first out" stack mechanism, so, when the user is done with the current activity and presses the Back button, it is popped from the stack (and destroyed) and the previous activity resumes 。所以这就是多活动的工作原理。
希望这能让您的概念更加清晰。
【讨论】:
那么一个activity是一个独立的线程吗?
是和不是。具有一个 Activity 的 Android 应用程序将有一个进程和一个线程,但如果有多个应用程序组件,它们通常都将使用同一个线程(除了某些使用自己的线程工作的 Android 类)。
请阅读以下内容...
如果可以,多个活动是否可以作为多线程应用程序同时运行?
Activity 仅在完全可见时才被视为“正在运行”。例如,当弹出窗口(例如,对话框等)出现时,底层Activity 仍然部分可见,但将处于“暂停”状态。如果另一个Activity 启动并完全隐藏了前一个(无论它是您自己的应用程序的一部分还是外部应用程序的一部分),则以前的Activity 将进入“停止”状态,甚至可能被销毁。
基本上,Android Activity 不是允许在多线程环境中执行多任务的主力。 Activity 基本上是一个 UI 框架,用于提供按钮、文本视图、图像等并允许用户交互。
另见...
...还可以在这里查看Activity 生命周期图...
【讨论】:
您应该了解 UI 线程的概念。基本上,有一个主线程(调用活动的回调方法的那个),您可以启动其他线程。你启动的线程不能更新 UI,只能更新 UI 线程。
在此处查看更多信息:What is the Android UiThread (UI thread)
【讨论】:
正如 android.h 提到的所有 UI 对象,活动在主线程上运行。但是您仍然可以使用异步任务从另一个线程中的 Web 服务读取数据,这将帮助您不在后台执行任务。 希望我的回答对你有所帮助。
【讨论】:
活动是用户界面,而线程是执行某些代码的进程工作者。 Android 确实有一个主线程来控制所有用户界面 (UI),因此如果您不指定另一个线程来运行您的 Activity,则主线程将运行您的整个 UI。
【讨论】:
Activity 是用户在使用应用程序时看到的任何 ui,线程是您的任务正在运行的地方。如果您愿意,总有一个称为主线程的线程来运行应用程序中的所有 ui 和进程为了提高执行速度,您需要创建更多线程,这样您的主线程就不会受到干扰,您的繁重任务会在后台运行。
【讨论】:
Activity代表单屏,有UI,其他手线程没有UI,用来做后台操作
【讨论】: