Activity与Service生命周期
一. Activity
先展示一张Activity的生命周期图:

1.1 Activity状态
只有下面三个状态是静态的,可以存在较长的时间内保持状态不变。(其它状态只是过渡状态,系统快速执行并切换到下一个状态)
- 运行(Resumed):
- 当前activity在最上方,用户可以与它进行交互。(通常也被理解为”running” 状态)
- 此状态由
onResume()进入,由onPause()退出
- 暂停(Paused):
- 当前activity仍然是可见的。但被另一个activity处在最上方,最上方的activity是半透明的,或者是部分覆盖整个屏幕。被暂停的activity不会再接受用户的输入。
- 处于活着的状态(Activity对象存留在内存,保持着所有的状态和成员信息,仍然吸附在window manager)。
- 当处于极度低内存的状态时,系统会杀掉该activity,释放相应资源。
- 此状态由
onPause()进入,退出可能onResume()或者onCreate()重新唤醒,或者被onStop()结束
- 停止(Stopped):
- 当前activity完全被隐藏,不被用户可见。可以认为是处于在后台。
- 处于活着的状态(Activity对象存留在内存,保持着所有的状态和成员信息,不再吸附在window manager)。
- 由于对用户不再可见,只要有内存的需要,系统就会清理该activity用以释放内存资源。
- 该状态由
onStop()进入,或onRestart()或者onCreate()重新唤醒,或者被onDestroy()彻底死亡。 - 其它状态 (Created与Started)都是短暂的,系统快速的执行那些回调函数并通过。
当acitivty处于暂停或者停止状态,系统可以通过finish()或 android.os.Process.killProcess(android.os.Process.myPid())来杀死其进程。当该activity再次被打开时(结束或杀死后),需要重新创建Ativity,走一遍完整的流程。
1.2 Activities调用流程
当Activity A 启动 Activity B时,两个activity都有自个的生命周期。Activity A暂停或者停止,Activity B被创建。记住,在Activity B创建之前,Activity A并不会完全停止,流程如下:
- Activity A 进入onPause();
- Activity B 依次 onCreate(), onStart(), onResume()。(此时Activity B得到了用户焦点)
- 如果Activity A不再可见,则进入onStop().
1.3 代码实践
利用下面的DemoActivity代码,可亲自感受每一个阶段的状态。比如点返回键,home键,menu键等操作,可以借助通过logcat查看该activity到底处于哪种状态,这里就不说结果了,自己动手,丰衣足食。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log; public class DemoActivity extends Activity {
private static final String TAG = "demo"; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG,"onCreate::The activity is being created.");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart::The activity is about to become visible.");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume::The activity has become visible.");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause:: Another activity is taking focus.");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop::The activity is no longer visible");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy::The activity is about to be destroyed");
}
}
二. Service
先展示一张Service的生命周期图:

2.1 启动方式:
service有两种启动方式, 不同的启动方式决定了Service具有两种生命周期的可能(并非互斥的两种)。
- start方式:onCreate(),onStartCommand()。onDestroy释放资源。
- bind方式: onCreate(),onBind()方法。需要所有client全部调用unbindService()才能将Service释放资源,等待系统回收。
2.2 代码实践
利用下面的DemoService代码,通过logcat自行感受每一个阶段的状态与场景的关系。
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log; public class DemoService extends Service {
private static final String TAG = "demo"; int mStartMode; // service被杀掉的方式
IBinder mBinder; // clients绑定接口
boolean mAllowRebind; // 是否允许onRebind @Override
public void onCreate() {
Log.i(TAG,"onCreate::The service is being created");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG,"onStartCommand::The service is starting");
return mStartMode;
}
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG,"onBind::A client is binding to the service");
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG,"onUnbind::All clients have unbound");
return mAllowRebind;
}
@Override
public void onRebind(Intent intent) {
Log.i(TAG,"onRebind::A client rebind to the service " +
"after onUnbind() has already been called");
}
@Override
public void onDestroy() {
Log.i(TAG,"onDestroy::The service is no longer used");
}
}
Activity与Service生命周期的更多相关文章
- Android(java)学习笔记171:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- Android Service生命周期及用法
Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行, ...
- Service生命周期以及应用
Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...
- Service具体解释(二):Service生命周期
< Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...
- Android中startService的使用及Service生命周期
Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...
- Service 生命周期
有了 Service 类我们如何启动他呢,有两种方法: • Context.startService() • Context.bindService() 1. 在同一个应用任何地方调用 start ...
- Android Service 生命周期
Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...
- Android(java)学习笔记114:Service生命周期
1.Service的生命周期 Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...
- Android Small插件化框架解读——Activity注册和生命周期
通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...
随机推荐
- Java实验项目六——使用DAO模式实现对职工表的操作
Program: 利用JDBC访问职工信息表,实现对职工信息的添加.更新.删除.按照职工号查找.查找全部职工的功能. Description:在这里我采用了DAO设计模式完成对职工表的操作,下面介绍一 ...
- webpack(11)配置文件分离为开发配置、生成配置和基础配置
前言 上篇我们已经配置好了本地开发服务器,但是配置的相对比较凌乱,一个文件中有些是开发时用到的配置,有些是生成时用到的配置,有些是开发和生成都要用到的配置,所以我们这里把环境分为3个环境 webpac ...
- 每日英语——the rest of my life
<the rest of My life> 词面意思:我的余生 实际意思:我的余生 1. 歌曲:<The Rest of My life> Less Than Jake 歌词 ...
- 为什么使用 LSTM 训练速度远大于 SimpleRNN?
今天试验 TensorFlow 2.x , Keras 的 SimpleRNN 和 LSTM,发现同样的输入.同样的超参数设置.同样的参数规模,LSTM 的训练时长竟然远少于 SimpleRNN. 模 ...
- Python单元测试框架unittest之单用例管理(一)
一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...
- Java基础00-数据输入5
1. 数据输入 1.1 数据输入概述 我们需要的数据(比如账号密码)并不是一开是就有的,而是要输入的. 1.2 Scanner使用的基本步骤 1.3 案例
- 论文阅读:Robust Visual SLAM with Point and Line Features
本文提出了使用异构点线特征的slam系统,继承了ORB-SLAM,包括双目匹配.帧追踪.局部地图.回环检测以及基于点线的BA.使用最少的参数对线特征采用标准正交表示,推导了线特征重投影误差的雅克比矩阵 ...
- DNS Bind日志详述
简介 在默认情况下,BIND9 把日志消息写到 /var/log/messages 文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息:而将调试日志信息写入 BIND ...
- cookie详解(八)
一.什么是cookie 1.大概了解 什么是 Cookie?针对不同用户,做出不同的响应.,这就是Cookie的原理.是浏览器储存在用户的机器上的(可见免用户名登录)1. Cookie翻译过来是饼干的 ...
- java跨平台性说明
一.举例说明 我们知道,只要是用标准C开发的程序,使用不同的编译器编译后的可执行文件是可以在对应平台运行的,比如windows可以使用VC编译,那编译后的exe文件就可以在windows下运行:liu ...