`
yidongkaifa
  • 浏览: 4038125 次
文章分类
社区版块
存档分类
最新评论

Android Activity总结

 
阅读更多

内容概要

• Activity的继承关系

• Android 中 Context介绍
• Acitivy实际是如何实例化的
• Activity生命周期
• Activity的启动方式,Task&Back Stack,进 程和线程,Intent.FLAG_ACTIVITY*

• Activity,Window,View的关系

• Android消息


内容

Activity是什么

• 是个应用程序的组件,提供⼀一个可以让用户 交互的屏幕。它本身并不是界面。

Activity的继承关系

• java.lang.Object
• ↳ android.content.Context
• ↳ android.content.ContextWrapper

↳ android.view.ContextThemeWrapper
• ↳ android.app.Activity

Android 中 Context

• 是Android应用程序环境的全局信息的接
口。
• 中文翻译是:上下文
• 可以理解为:句柄,环境变量。
Context是什么,它的作用?
• Context字面意思上下文,位于framework package的android.content.Context中,其实 该类为LONG型,类似Win32中的Handle句 柄,很多方法需要通过Context才能识别调用 者的实例,比如说T oast的第⼀一个参数就 是Context,⼀一般在Activity中我们直接 用this代替,代表调用者的实例为Activity,而 到了⼀一个button的onClick(View view)等方法 时,我们用this时就会报错,所以我们可能使 用ActivityName.this来解决,主要原因是因为 实现Context的类主要有Android特有的几个模
型,Activity、Service以及BroadcastReceiver


Activity生命周期
• 1、Activity 从创建到进入运行态所触发的事
件 onCreate()-->onStart-->onResume() • 2、从运行态到停止态所触发的事件
onPause()--->onStop()
• 3、从停止态到运行态所触发事件 onRestart()-->onStart()--->onResume()
• 4、从运行态到暂停态所触发事件 onPause()
• 5、从暂停态到运行态所触发事件 onResume()
Activity生命周期
• a.打开应
用:onCreate-》onStart-》 onResume ,在开始的时候这三个方法都会调用。
• b.从第⼀一个activity切换到第二个:先
会 onPause第⼀一个,然 后onCreate-》onStart-》 onResume,最 后在onStop
• c.从第二个切换到第⼀一个:内容与上⼀一步 相同
• d.按手机的回退(back)键:先onPause 第⼀一个,然
后 onRestart-》 onStart-》 onResume




Activity的启动方式

• Activity有四种加载模式:

• Standard
• singleTop
• singleTask
• singleInstance
Activity的启动方式 • Standard启动⼀一次就⼀一个实例
• singleTop 启动时,如果正好在顶部 则NewIntent到这个实例,如果不在,则是 第二个实例
• singleTask 当Task里存在实例, 则NewIntent到这个实例,
• singleInstance创建⼀一个单独的task存放这 个实例,每次跳过来都是这个实例。
• onNewIntent onStart onResume
FLAG_ACTIVITY_REORDER_TO
• 如果已经启动了四 个Activity:A,B,C和D,
在D Activity里,想再启动⼀一个Actvity B, 但不变成A,B,C,D,B,而是希望 是A,C,D,B,则可以像下面写代 码:intent.addFlags(Intent.FLAG_ACTIVI TY_REORDER_TO_FRONT);

FLAG_ACTIVITY_NEW_TASK
• 例如现在栈1的情况是:A B C。C通 过intent跳转到D,并且这个intent添加 了FLAG_ACTIVITY_NEW_TASK标记,如 果D这个Activity在Manifest.xml中的声明中 添加了Task affinity,并且和栈1的affinity不 同,系统首先会查找有没有
和D的T askaffinity相同的task栈存在,如果 有存在,将D压入那个栈,如果不存在则会 新建⼀一个D的affinity的栈将其压入。如 果D的Task affinity默认没有设置,或者和 栈1的affinity相同,则会把其压入栈1,变
成:A B C D,这样就和不
FLAG_ACTIVITY_NO_HISTORY FLAG_ACTIVITY_SINGLE_TOP
• 例如现在栈情况为:A B C。C通过intent跳 转到D,这个intent添 加FLAG_ACTIVITY_NO_HISTORY标志, 则此时界面显示D的内容,但是它并不会压 入栈中。如果按返回键,返回到C,栈的情 况还是:A B C。如果此时D中又跳转到E, 栈的情况变为:A B C E,此时按返回键会 回到C,因为D根本就没有被压入栈中。
• FLAG_ACTIVITY_SINGLE_TOP:和上 面Activity的Launch mode的singleTop类 似。如果某个intent添加了这个标志,并且
这个intent的目标activity就是栈顶
FLAG_ACTIVITY_SINGLE_TOP
• 如果已经启动了四个Activity:A,B, C和D。在D 里,要到B ,同时去掉 C D 。用:Intent.FLAG_ACTIVITY_CLEAR_T OP
• 如果不想重新再创建⼀一个新的B,则加 上:Intent.FLAG_ACTIVITY_SINGLE
• intent.setFlags(Intent.FLAG_ACTIVITY_SI NGLE_TOP |Intent.FLAG_ACTIVITY_CLEAR_TOP);

• 这个和singleTask方式差不多


Android的5个进程等级

• 1) Foreground Process
• 正处于Activity Resume() 状态
• 正处于与bound服务交互的状态
• 正处于服务在前台运行的状态 , (startForeground() 被调用)
• Service生命周期函数正在被执行 ( onCreate() , onStart() , onDestroy())
• BroadcastReceiver 正在执 行onReceive()方法
杀死Foreground Process 需要用户响应


程序启动




PackManager和ActivityManager

一、PackageManager相关
PackageManager相关
本类API是对所有基于加载信息的数据结 构的封装,包括以下功能:

安装,卸载应用 查询permission相关信息 查询Application相关信
息(application,activity,receiver,service ,provider及相应属性等)
查询已安装应用 增加,删除permission 清除用户数据、缓存,代码段等


Launcher

• 系统启动后加载的第⼀一个程序 • 是其他应用程序的入口
• HomeScreen


Activity,Window,View的关系

• Activity在onCreate之前调用attach方法, 在attach方法中会创建window对 象。window对象创建时并木有创 建Decor对象对象。用户在Activity中调 用setContentView,然后调 用window的setContentView,这时会检 查DecorView是否存在,如果不存在则创 建DecorView对象,然后把用户自己 的View 添加到DecorView中。

Android消息

• 关于消息机制的几个类 • Handler
• Message
• MessageQueue
• Looper
Android消息
• 1.Looper:(相当于隧道) ⼀一个线程可以产生 ⼀一个Looper 对象,由它来管理此线程里 的Message Queue( 车队,消息隧道) 。
• 2.Handler: 你可以构造Handler 对象来 与Looper 沟通,以便push 新消息 到Message Queue 里;或者接 收Looper( 从Message Queue 取出) 所送 来的消息。
• 3. Message Queue( 消息队列): 用来存放线 程放入的消息。
• 4 .线程:UI thread 通常就是main
thread ,而Android 启动程序时会替它建立

Activity实际是如何实例化的

activity and binder

• 从宏观的角度观
察Binder,Service,Service Manager,并阐 述各自的概念。从Linux的概念空间 中,Android的设计Activity托管在不同的的 进程,Service也都是托管在不同的进程, 不同进程间的Activity,Service之间要交换数 据属于IPC。Binder就是为了Activity通讯而 设计的⼀一个轻量级的IPC框架。
• activity 整个应用程序的启动过程: • ⼀一. Step1 - Step 11:Launcher通
过Binder进程间通信机制通

Activity调用栈

• 0:dalvik.system.VMStack.getThreadStack Trace(Native 1:java.lang.Thread.getStackTrace(Thread .java:737)
• 2:app.android.demo.activity.MainTestActiv ity$1.run(MainTestActivity.java:40) 3:android.os.Handler.handleCallback(Han dler.java:587)
• 4:android.os.Handler.dispatchMessage(H andler.java:92)
• 5:android.os.Looper.loop(Looper.java:123
)
• • • • •
• •
Activity调用栈

• 每个应用程序都以ActivityThread.main()为 入口进入到消息循环处理。对于⼀一个进程 来讲,我们需要这个闭合的处理框架。

Activity与HistoryRecord的关系

• 在整个系统中,Activity实际上有两个实 体。⼀一个在应用进程中跟应用程序员打交 道的Activity,⼀一个是在AMS的中具有管理 功能的History Record。应用进程中 的Activity都登记ActivityThread实例中 的mActivity数组中,而 在AM端,HistroytRecord实例放置 在mHistroy栈中。mHistory栈是Android管 理Activity的场所,放置在栈顶的就 是User看到的处于活动状态的Activity。
• Activity与HistrotyRecord的关系图可以表示
如下:


分享到:
评论

相关推荐

    android activity详细总结

    一篇关于android activity的详细总结

    Android Activity生命周期

    描述 Android Activity生命周期之间的关系

    android总结activity切换出现效果.zip

    Android开发中一个activity切换到另一activity的各种效果总览

    Android实验二:Activity的生命周期及Intent

    1、设计界面,包括四个按钮,两个文本框。单击对应按钮可以启动对应...假定Activity A为启动Activity。 2、修改 Activity 的启动模式 LaunchMode,并通过 Log 信息来体会不同启动模式所对应的Activity 和 task 的关系

    Android中关于Activity的总结

    关于Android的四大组建之一-----Activity的详细总结,初学者有需要的可以参看。

    Android基础总结篇之三:Activity的task相关介绍

    本篇文章主要介绍了android基础总结篇之三:Activity的task相关,具有一定的参考价值,有需要的可以了解一下。 今天我们来讲一下Activity的task相关内容。 上次我们讲到Activity的四种启动模式的时候,已经了解到...

    Android Activity之间的数据传递方法总结

    在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法。 1、通过 Intent 传递 我们在进行 Activity 跳转时,是要有 Intent,此时 ...

    Android多个Activity之间跳转的总结[定义].pdf

    Android多个Activity之间跳转的总结[定义].pdf

    Android中的Activity生命周期总结

    上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合此图详细介绍一下Activity的生命周期。 Activity四大基本...

    Android技术总结+面试题

    Android技术总结+面试题 经典问题之一 如何退出Activity?如何安全退出已调用多个Activity的Application? 后面的自己看去吧。。。。

    android ams

    关于android activityManagerService的总结

    Activity&Intent详解.pptx

    android Activity& android Intent详解, 入门级别

    Android应用程序窗口(Activity) · 老罗的Android之旅(总结) · 看云1

    Android应用程序窗口(Activity)实现框架简要介绍和学习计划运行上下文环境(Context)的创建过程分析窗口对象(Window)的创建过程分析视图

    android基础总结篇之一:Activity生命周期

    其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activity处在这个容器中,一切创建实例、初始化、销毁实例等过程都是容器来调用的,这也...

    Android Activity 不能被截屏的解决方法

    您可能感兴趣的文章:Android截屏方案实现原理解析Android截屏分享功能Android 下调试手机截屏的方法Android 实现截屏功能的实例android长截屏原理及实现代码Android实现截屏方式整理(总结)Android截屏Sur

    android开发期末大作业.zip

    1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)...

    自己平时做的android相关的总结

    声明:这些内容是逐步总结过来的,所以可能有当时的理解不正确,只希望大家能做个参考: 内容如下: 目录 一句话总结汇总: Copy project into workspace 和add project into work set 的含义 数字签名总结 JNI ...

    Android中Activity跳转的创建步骤总结

    主要介绍了Android中Activity跳转的创建步骤总结,本文详细的讲解了从工程创建到跳转Activity的实现完整过程,需要的朋友可以参考下

    实验一Android环境构建与Activity生命周期(1).doc

    实验一Android环境构建与Activity生命周期 一、 实验内容: 1、页面要求:主页面三个按钮。 2、功能要求:点击按钮分别调用:内部的Activity、自定义的Activity、结束当前 的Activity。 二、实验要求: 1. 利用几个...

Global site tag (gtag.js) - Google Analytics