写下来仅记录下困惑了很久的问题...
先说下我以前的错误理解:
Service和Broadcast 这两个东西, 我一直认为这个能够脱离Activity的进程。
因为这两个东西的外部表现就是你离开利当前的进程(直观表现就是你离开当前应用),这两个东西仍然存在在Android的内存中。
我就想当然的认为既然程序都退出了,Service和Broadcast还没有结束,那么这连个东西肯定是依附在系统进程上。
正确的理解是:
Activity,Service,Broadcast这3个东西不仅在同一个进程中,并且还在同一个线程中。
如果有怀疑的话,可以开一个带有Servie的程序,然后用任务管理器杀死这个Service所在的进程,那么你会发现这个Service在相应的被杀死了.
错误的理解归结一下就是看问题的角度有问题。
以前认为是自己的应用程序去控制Android, 其实不然 应该这样理解:你的整个应用程序的生命周期都是Android在帮助你控制。
Activity是Android帮我们创造的,Service和Broadcast也是Android帮我们创造的。
所以当你离开应用程序的时候,你会认为这个程序所在的进程已经被你杀死了(都是被Windows毒害的)。
其实你这个就涉及到Android中Activity的几种状态:
你能够看见的Activity是激活状态,
你看不见的Activity是暂停状态(简单这么认为吧,其实还有别的状态)。
最后总结一下:
不要用应用程序的角度去理解Android, 要用Android的角度去看待应用程序。
不要在Broadcast和Service运行时间较长的任务,容易卡死程序。如果想运行长时间的任务可以再开启一个线程运行。 不要盲目的认为在Service中运行下载任务就卡不死你的程序了。
相关推荐
- **使用BroadcastReceiver**:`Service`通过发送Broadcast,`Activity`注册BroadcastReceiver来接收数据。`Service`创建一个`LocalBroadcastManager`实例,发送广播;`Activity`在需要接收数据的地方注册Receiver...
总之,理解Android中的进程和线程通信机制对于开发高效、稳定的应用至关重要。合理利用进程和线程可以确保UI的流畅性,同时避免不必要的性能问题。开发者需要根据应用的需求选择合适的通信方式,确保应用的健壮性和...
对于更复杂的跨进程通信,可以使用AIDL定义接口,使得Service能在不同的进程中暴露方法供Activity调用,实现更强大的数据交换。 8. **LiveData和ViewModel**: 如果你的应用使用了Android架构组件,LiveData和...
本篇文章将详细讲解如何在Android中创建一个常驻Service,并结合BroadcastReceiver实现线程间(Service Thread与Activity)的异步通信。 一、创建Service 1. 定义Service类:首先,我们需要创建一个继承自`Service...
主要的四种跨进程通信方式包括:Activity、Content Provider、Broadcast Receiver以及Service,特别是AIDL(Android Interface Definition Language)服务。 1. **访问其他应用程序的Activity** - 在同一应用内...
程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...
1. **Intent启动Activity的方式**:在Android中,Intent用于组件间的通信,包括启动Activity、Service以及发送Broadcast。启动Activity的方式主要包括以下几种: - `Intent.ACTION_MAIN` 和 `Intent.CATEGORY_...
- **联系**:从宏观角度看,DVM实例确实可以被视为Linux进程的一种具体表现形式。因此,在Android应用程序的上下文中讨论时,可以说它们是同一概念。 #### 二、SIM卡EF文件的作用 - **定义**:EF(Elementary File...
总的来说,这个"Android多线程断点下载Demo"涵盖了Android开发中的多个重要知识点,包括数据库操作、跨进程通信、后台服务以及多线程并发控制,是学习和理解Android高级特性的良好实践。通过深入研究和实践这个Demo...
总的来说,掌握Android基础知识意味着理解Activity、Service、Broadcast Receiver和Content Provider的角色,了解APK的打包和部署,以及Android系统如何管理进程和线程。这为开发者提供了在Android平台上创建高效、...
- **Service与进程和线程**: - Service可以在自己的进程中运行。 - 可以创建新的线程来执行耗时操作。 #### 八、BroadcastReceiver的使用 - **BroadcastReceiver的概念**: - BroadcastReceiver用于接收系统或...
它可以用来启动一个新的Activity、绑定一个Service或者发送一个Broadcast。 - **关闭组件** - 关闭组件通常是通过调用特定的方法来实现的,例如`finish()`方法用于关闭当前的Activity。 #### manifest文件 - **...
Android编程入门是学习Android开发的基础,它涉及到许多关键概念和技术,包括应用程序的组成元素、Activity与Task管理、进程和线程以及元素的生命周期。 一、应用程序的组成元素 1. **Activity元素**:Activity是...
- **Intent**:Intent用来传递信息或者启动Activity、Service等组件。 #### 应用程序组件 - Components of an Application Android应用程序是由多个组件构成的,每个组件都有特定的功能。 - **Activity**:用户...
- 屏幕旋转会导致 Activity 重启,即 Activity 会经历从 `onPause()` 到 `onDestroy()` 再到 `onCreate()` 的过程。为了避免数据丢失,可以通过在 `onSaveInstanceState()` 方法中保存关键数据,然后在 `onCreate()`...
- **激活组件 - Intent**:Intent是一种消息对象,用于在不同的组件之间传递信息,包括启动新的Activity、启动Service、发送Broadcast等。 - **关闭组件**:通过结束Activity或Service来关闭组件。 - **manifest文件...
- Intent用于启动Activity、Service或者发送Broadcast。 - 按照用途分为显式Intent(指定目标组件)和隐式Intent(不指定具体组件,依赖于匹配的ACTION、DATA、CATEGORY等)。 4. **Android布局优化**: - 使用`...
它可以用来启动一个新的Activity、Service或者发送Broadcast。Intent可以携带额外的数据,使得组件之间的通信变得简单而灵活。 #### 五、Activity、Intent、Service的关系 - **Activity**: 屏幕上显示的界面,用户...
- **Intent**:表示一个抽象的动作请求,用于启动Activity、Service或发送Broadcast。 - **IntentFilter**:定义了一组匹配规则,用于筛选符合特定条件的Intent。 #### 26. 显示意图与隐式意图的区别 - **显示意图*...