一. 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并不会完全停止,流程如下:

  1. Activity A 进入onPause();
  2. Activity B 依次 onCreate(), onStart(), onResume()。(此时Activity B得到了用户焦点)
  3. 如果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具有两种生命周期的可能(并非互斥的两种)。

  1. start方式:onCreate(),onStartCommand()。onDestroy释放资源。
  2. 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生命周期的更多相关文章

  1. Android(java)学习笔记171:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  2. Android Service生命周期及用法

    Service概念及用途:Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行, ...

  3. Service生命周期以及应用

    Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...

  4. Service具体解释(二):Service生命周期

    < Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...

  5. Android中startService的使用及Service生命周期

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...

  6. Service 生命周期

    有了 Service 类我们如何启动他呢,有两种方法: • Context.startService() • Context.bindService()  1.  在同一个应用任何地方调用 start ...

  7. Android Service 生命周期

    Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行 ...

  8. Android(java)学习笔记114:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  9. Android Small插件化框架解读——Activity注册和生命周期

    通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...

随机推荐

  1. Vue:node.js与vue安装配置

    下载node.js 官网: https://nodejs.org/zh-cn/ 查看node版本 node -v 配置淘宝NPM镜像源(下载速度快) npm install -g cnpm --reg ...

  2. .Net Core微服务——服务发现:Consul(一)

    先思考一些问题:它是做什么的.以及怎么使用它.带着这些问题往下走. consul是做什么的 consul用于微服务下的服务治理.服务治理是什么?它包含但不限于:服务发现.服务配置.健康检查.键值存储. ...

  3. 华为交换机5855设置ssh

    配置思路 配置交换机密钥对 #生成RSA密钥对 设置vty登陆用户界面的认证方式为AAA认证 #设置远程认证方式 设置aaa用户信息 #本地用户名和密码 #本地用户服务类型 #本地用户授权等级 设置s ...

  4. 重学 Spring Boot

    什么是Spring Boot Spring Boot 是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度和简化 Spring ...

  5. if语句 条件测试 shell编程之条件语句

    shell 编程之条件语句一.条件测试  ① test命令 测试  ② 文件测试  ③ 整数值比较  ④ 字符串比较  ⑤ 逻辑测试二.if语句的结构  单分支结构  双分支结构  多分支结构三.ca ...

  6. c语言:解释程序和编译程序

    编译程序和解释程序是程序执行的两种不同执行方式. 编译程序:编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序.编译过程划分成词法分析.语法分析.语义分析.中间代码生成.代码优化和目标代 ...

  7. Java基础00-基础语法3

    1. 注释 1.1 注释概述 1.2 注释分类 1.3 示例 2. 关键字 2.1 关键字概述 2.2 关键字的特点 3. 常量 3.1 常量的概述 3.2 常量分类 以上常量除了空常量都是可以直接输 ...

  8. 春招后端阿里腾讯字节美团Offer拿来吧你,面试经验分享

    近期很多童鞋在准备校招了,找了蚂蚁的一位童鞋,给大家分享一波面试经验,以及面试心得,希望能帮大家在秋招拿到一个好结果 我自己的22届春招实习算是告一段落,给自己做个总结,也给大家分享一下面试的一些心得 ...

  9. Adaptive AUTOSAR 学习笔记 8 - 干货小结:背景、技术、特征、架构、方法论和 Manifest

    官方文档下载方式及介绍情参见 Adaptive AUTOSAR 学习笔记 2 - 官方文档下载及阅读建议. 这是 Adaptive AUTOSAR 学习笔记的第 8 篇,学习笔记 3 - 7 翻译了 ...

  10. LeetCode通关:听说链表是门槛,这就抬脚跨门而入

    分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/youngyangyang04/leetcode-master       https://github.com/ch ...