当前位置: 首页 > 编程日记 > 正文

【转】Android Activity原理以及其子类描述,androidactivity

Android Activity原理以及其子类描述,androidactivity

简介

Activity是Android应用程序组件,实现一个用户交互窗口,我们可以实现布局填充屏幕,也可以实现悬浮窗口。一个app由很多个Actvitiy组合而成,它们之间用intent-filter区别主次关系。
下面将简单介绍Activity以及其子类和其它界面。

详情
1、Activity

\

2、ListActivity

\

3、ActivityGroup

\

4、TabActivity

\

5、PreferenceActivity

\

6、FragmentActivity

\

7、ListFragment

\

8、NativeActivity

\

9、ExpandableListActivity

\

10、LauncherActivity

\

11、AliasActivity

\


12、PreferenceFragment

\

13、ActivityCompat

\

14、ActivityUnitTestCase

\


Activity 管理

目前涉及到Activity管理的类就两个:1、LocalActivityManager 2、ActivityManager。它们分别做了什么呢?

\

\

生命周期

\

这里有三个比较关键的生命周期。

从最初调用onCreate(Bundle)到最终调用onDestroy()称为完整生命周期。Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。举个例子,如果它有一个从网络上下载数据的后台线程,那他可能就会在onCreate()中创建这个线程并在onDestroy()中停止这个线程。

从activity调用onStart()开始,到调用对应的onStop()为止称为可见生命周期。在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前景也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。

从activity调用onResume()开始,到调用对应的onPause()为止称为前景生命周期,这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。

下面的Activity方法定义了activity完整的生命周期。他们全都是hook方法,你可以重载这些方法从而使activity在状态改变时执行你所期望的操作。所有activity都应该实现自己的onCreate(Bundle)方法来进行初始化设置;大部分还应该实现onPause()方法提交数据的修改并且准备终止与用户的交互。尽管我们计划在系统中添加更多的工具来管理应用,现在大多activity仍需要实现onFreeze()并且在onCreate(Bundle)中执行对应的状态恢复。其他的方法可以在需要时进行实现,当实现这些方法的时候需要注意的是一定要调用父类中的对应方法。

android的activity类与intent的问题

每个Activity都需要一个类来继承,
Activity你可以理解成一个应用场景,如果你想像成web网页,那么它就是一个页面。
多个activity之间可以跳转,就像网页之间相互跳转一样。你只需要设置Intent,不需要GetIntent
GetIntent是系统做的事情,系统收到你的Intent意图,会自动生成你想要跳到的那个页面的类对象实例,并自动回调该类的Oncreate方法,你只要在该Oncreate方法里写下你那个页面的UI初始化工作就可以了。

跳转可以像你说的那样使用Intent机制来实现:
Intent intent = new Intent();
intent.setClass(this, Page.class);
this.startActivity(intent);
这样就可以了。关键是setClass方法, 参数一是当前这个Activity也就是当前页面的类,参数二是另一个页面的class

为什么是class而不是object对象呢? 因为Android希望你不要去实例new一个页面对象,而是告诉系统你要跳转到哪个页,由系统帮你new一个该页面的对象。然后系统帮你跳过去,这个过程你不要运控制就好了。

继续:
当this.startActivity方法执行后,页面就会从当前页跳转到你指定的下一页,这我的例子中,那个页叫Page ,它也是extends Activity的一个类,

有一个前提,所有的Activity(包括这个Page)都必须实例Activity的抽像方法OnCreate();因为Activity是抽象类,而onCreate又是抽像方法,所以你必须实现,填完整这个方法,在里面写点东西,一般都是生成一些,按钮,菜单,图片,文字等进行界面的初始化。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance=this;
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(R.layout.main);
//TODO 
//your code
}

同样还有Onstop,onResume等方法可以实现,但他们不是抽像方法,可以选择性的实现。不强制。

至于在xml中的配置是这样的,你需要填所有的activity页面类的路径
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Mstar"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="an......余下全文>>

from:http://www.android100.org/html/201508/19/174311.html

转载于:https://www.cnblogs.com/xuan52rock/p/5394623.html

相关文章:

python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能

python 文件追加写入欢迎 (Welcome) Hi! If you want to learn how to work with files in Python, then this article is for you. Working with files is an important skill that every Python developer should learn, so lets get started.嗨&#xff01; 如果您想学习如何…

带有中文的字符串各个字符的获取c++程序

简单易懂&#xff0c;上代码&#xff1a; #include <iostream> #include <cstring> #include <string> #include <cstdlib> #include <vector> using namespace std;class CStr{char *c;typedef struct {int start;bool isChinese;} counter;int…

C#时间格式化(Datetime)用法详解

Datetime.ToString(String, IFormatProvider) 参数format格式详细用法&#xff1a; 格式字符关联属性/说明dShortDatePatternDLongDatePatternf完整日期和时间&#xff08;长日期和短时间&#xff09;FFullDateTimePattern&#xff08;长日期和长时间&#xff09;g常规&#xf…

python添加数组元素_Python列表附录–如何向数组添加元素,并附带示例说明

python添加数组元素欢迎 (Welcome) Hi! If you want to learn how to use the append() method, then this article is for you. This is a powerful list method that you will definitely use in your Python projects.嗨&#xff01; 如果您想学习如何使用append()方法&…

学习进度条--第七周

第七周 所花时间&#xff08;包括上课时间&#xff09; 10小时&#xff08;包括上课2小时&#xff09; 代码量&#xff08;行&#xff09; 152 博客量&#xff08;篇&#xff09; 2篇&#xff08;包括团队博客&#xff09; 了解到的知识点 对组内开发的软件进行讨论&am…

Mybatis获取插入记录的自增长ID

转自&#xff1a;http://blog.csdn.net/tolcf/article/details/39035259 1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”&#xff0c;其中keyProperty是Java对象的属性名&#xff0c;而不是表格的字段名。 <insert id"insert" parameter…

android中一种不支持的lua操作

今天写了一段lua代码&#xff0c;在win32中正常运行&#xff0c;在android中运行无效。 大概是这样的&#xff1a; ------file1.lua----- local t {} t.str "this is file1.t" return t ---------------------- -----file2.lua------ local t require &quo…

23岁一无所有怎么办_我搬到国外去创业,然后一无所有。

23岁一无所有怎么办以我的名字还不到一美元&#xff0c;它仍然感觉不像是最低点。 (With not even a dollar to my name, it still didn’t feel like rock bottom.) When you tell someone you’re working for a startup, they’ll either think you’re gonna be really ric…

正则表达式的基本入门

一、正则表达式基本语法 1. 两个特殊的符号‘^’和‘$’。他们的作用分别指出一个字符串的开始和结束。 2. 其他还有‘*’&#xff0c;‘’&#xff0c;‘&#xff1f;’这三个符号&#xff0c;表示一个或一序列字符重复出现的次数 "ab{2}" ---表示一个字符串有一个…

多继承中虚基类构造函数的一种调用规则

规则&#xff1a;如果父类中有虚基类(A)&#xff0c;且有一个直接基类(B)是虚基类的子类&#xff0c;那么子类(C或D)若不显式调用虚基类的有参数构造函数&#xff0c;它的直接基类(B)即使在构造列表中调用了非默认构造函数&#xff0c;那么也会直接调用虚基类的默认构造函数。 …

Android 常见异常及解决办法

前言 本文主要记录 Android 的常见异常及解决办法&#xff0c;以备以后遇到相同问题时可以快速解决。 1. java.lang.NullPointerException: Attempt to invoke virtual method void android.widget.TextView.setText(java.lang.CharSequence) on a null object reference 1) …

aws s3 静态网站_如何将静态网站或JAMstack应用托管并部署到AWS S3和CloudFront

aws s3 静态网站S3 and CloudFront are AWS cloud services that make serving static assets powerful and cheap. How can we host a simple static website or JAMstack app on it?S3和CloudFront是AWS云服务&#xff0c;使服务静态资产功能强大且价格便宜。 我们如何在其上…

图像预处理第7步:标准归一化

图像预处理第7步&#xff1a;标准归一化将分割出来的各个不同宽、高的数字字符宽、高统一 //图像预处理第7步&#xff1a;标准归一化 //将分割出来的各个不同宽、高的数字字符宽、高统一 void CChildView::OnImgprcStandarize() {StdDIBbyRect(m_hDIB,w_sample,h_sample);//在…

8. 进制转化的函数

一&#xff0c;表示进制的单词 bin&#xff1a;二进制 oct&#xff1a;八进制 dec&#xff1a;十进制 hex&#xff1a;十六进制二&#xff0c;四种进制的数据表示方式 $bin0b1010; //二进制数字写法&#xff08;暂时不学 &#xff09; …

二叉树广度优先遍历

#include <iostream> using namespace std;struct Node{//二叉树节点int value;Node *left;Node *right; };struct queue{//辅助队列int head;int tail;int len;//队列长度&#xff0c;遍历时用Node ** list;//队列内容void push(Node *n){list[tail] n;len;}Node * pop…

phaser.min.js_如何使用Phaser 3,Express和Socket.IO构建多人纸牌游戏

phaser.min.jsIm a tabletop game developer, and am continually looking for ways to digitize game experiences. In this tutorial, were going to build a multiplayer card game using Phaser 3, Express, and Socket.IO.我是桌面游戏开发人员&#xff0c;并且一直在寻找…

VirtualBox - RTR3InitEx failed with rc=-1912 (rc=-1912)

有一天重启电脑后虚拟机virtual box突然打不开了&#xff0c;提示类似 https://askubuntu.com/questions/900794/virtualbox-rtr3initex-failed-with-rc-1912-rc-1912 参考帖子中查看了一下包的情况dpkg --list virtualbox-* | grep ii 结果&#xff1a;ii virtualbox-dkms …

边工作边刷题:70天一遍leetcode: day 27

Permutation Sequence 原理&#xff1a;一个permutation是n位&#xff0c;在第i位的值取决于有多少个i-1位的组合。这i-1位的组合是在高位pick完之后剩下的数中 细节&#xff1a; 不同于decimal&#xff0c;位数是固定的&#xff0c;所以不能用k>0作为循环条件&#xff08;这…

基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)

#include <iostream> using namespace std; //约定&#xff1a; //1. 图是由很多节点(VERTEX)构成的, 因此图结构是由一个VERTEX的链表构成的, 每个VERTEX则需要有一个id,也就是start, 取start是为了跟LINE更直观地结合。 //2. 每个节点关联着很多(LINE)构成,因此每个VER…

gatsby_如何使用Gatsby和Leaflet创建夏季公路旅行地图绘制应用程序

gatsbyGet ready for the summer by building your own road trip mapping app with this step-by-step guide!通过此逐步指南&#xff0c;构建自己的公路旅行地图应用&#xff0c;为夏天做好准备&#xff01; What are we going to build? 我们要建造什么&#xff1f; What …

NEFU 1146 又见A+B

又见ab Problem:1146 Time Limit:1000ms Memory Limit:65535K Description 给定两个非负整数A,B,求他们的和。 Input 多组输入&#xff0c;每组输入两个非负整数A和B&#xff08;0<A,B<10^3000&#xff09;&#xff0c;可能会有前缀0&#xff0c;但保证总长度不超过3000…

图的最短路径dijkstra算法

想法是这样的&#xff1a; 1. 最开始要建立4个list&#xff0c;分别存储 a. 所有的Vertex: allVertex[] b. 一个空的Vertex list: emptyVertex[] c. 一个前缀表 previous list(用来回溯路径用): previous[] d. 一个表示最短距离的表(就是表示某个点与0点的最短距离)&#xff1…

JDBC数据源连接池(1)---DBCP

何为数据源呢&#xff1f;也就是数据的来源。我在前面的一篇文章《JDBC原生数据库连接》中&#xff0c;采用了mysql数据库&#xff0c;数据来源于mysql&#xff0c;那么mysql就是一种数据源。在实际工作中&#xff0c;除了mysql&#xff0c;往往还会有Oracle&#xff0c;sql se…

如果成为一名高级安卓开发_什么是高级开发人员,我如何成为一名开发人员?

如果成为一名高级安卓开发Becoming a Senior Developer is something many of us strive for as we continue our code journey and build our career. But what does it actually mean to be a "Senior" Developer?成为一名高级开发人员是我们许多人在继续我们的代…

拍牌神器是怎样炼成的(三)---注册全局热键

要想在上海拍牌的超低中标率中把握机会、占得先机&#xff0c;您不仅需要事先准备好最优的竞拍策略&#xff0c;还要制定若干套应急预案&#xff0c;应对不时之需。既定策略交给计算机自动执行&#xff0c;没有问题。可是谁来召唤应急预案呢&#xff1f;使用全局热键应该是个不…

eclipse 变成中文

官方下载 http://www.eclipse.org/babel/downloads.php 按照自己的eclipse版本下载对应的 复制链接 到eclipse ->help->Install New Software 勾选自己的语言包 如&#xff1a; 等待 安装完成 &#xff0c;无过不好用 更改 右键 属性 更改位置 加后缀 D:\xinle_eclips…

框架模式与设计模式之区别

http://my.oschina.net/u/991183/blog/109854 有很多程序员往往把框架模式和设计模式混淆&#xff0c;认为MVC是一种设计模式。实际上它们完全是不同的概念。框架、设计模式这两个概念总容易被混淆&#xff0c;其实它们之间还是有区别的。框架通常是代码重用&#xff0c;而设计…

村上春树 开始写作_如何克服对写作的恐惧并找到开始的动力

村上春树 开始写作Writing about our work is one of those things that most of us have on our to-do list. But whether its due to procrastination or fear, we never actually get to it. Heres some more motivation and reasons why you should give it a shot!撰写我们…

一个基于组件的动态对象系统

http://hulefei29.iteye.com/blog/1490889 一、静态的痛苦 作为一个项目经验丰富的程序员&#xff0c;你经常会遇到游戏开发过程中的“反复”(iterations)&#xff1a;今天美术将一个静态的模型改为骨骼模型并添加了动画&#xff1b;明天企划会议上决定把所有未拾取武器由…

Lua生成Guid(uuid)

全局唯一标识符&#xff08;GUID&#xff0c;Globally Unique Identifier&#xff09;也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下&#xff0c;…