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使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...
随机推荐
- UI自动化学习笔记- UnitTest单元测试框架详解
一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...
- redis-cluster集群安装(windows)
在此先奉上安装包(链接:https://pan.baidu.com/s/1QHYQPkYPuiRWhdj9APbjnw 提取码:jv8x ) 1. 安装ruby 下载 rubyinstaller-2. ...
- Windows软件包管理工具:Scoop
前言 删库跑路后,Windows系统如何快速安装应用程序,部署环境呢? 以前想过这个问题,最近在安装Hugo时发现使用软件包管理工具可以解决这个问题. 阅读建议 首先需要测试下载速度,尝试从官网下载, ...
- 第九章 身体质量指数BMI的python实现
身体质量指数BMI:对身体质量的刻画(Body Mass Index) 国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析 定义: BMI=体重(kg)/身高^2(m2) 提出问题: 实例 ...
- C语言字符串处理库函数大全(转)
一.string.h中字符串处理函数 在头文件<string.h>中定义了两组字符串函数.第一组函数的名字以str开头:第二组函数的名字以mem开头. 只有函数memmove对重叠对象间的 ...
- Django基础009--Paginator分页
1.引入 from django.core.paginator import Paginator 2.Paginator对象提供的方法 articles = models.Article.object ...
- nacos配置本地多个实例(伪集群)
在本地配置多个nacos实例(伪集群),一般就是配置多个nacos端口,并启动多个startup.sh脚本.网上一些博客通过修改startup.sh脚本来指定不同nacos端口,比如:./startu ...
- 前端开发入门到进阶第五集【安装SublimeServer】
参考:https://www.cnblogs.com/jf-67/p/8031614.html 1.我们可以直接在sublime text里面安装,Ctrl+shift+p进入命令模式,输入insta ...
- Leetcode:面试题28. 对称的二叉树
Leetcode:面试题28. 对称的二叉树 Leetcode:面试题28. 对称的二叉树 Talk is cheap . Show me the code . /** * Definition fo ...
- Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上节中,我们为大家介绍了Pod的基础内容,Kubernetes如何站在上帝视角上处理容器和容器之间的关系. ...