关闭

Android基础知识整合篇——Activity知识点

标签: android
2217人阅读 评论(0) 收藏 举报
分类:

Android基础知识部分整合连载篇——四大组件——Activity

    今天,我着手开始android基础知识总体整合以及复习(结合郭霖大神的《第一行代码》),来对我这段时间碎片化的知识进行总结和整理,写下这些连载博文为的是方便读者对基础知识的回顾,以及我自己对所学知识点的消化。也希望博客能给诸位一点小小的帮助,也就是对我码三小时这么多字最大的回报了。微笑

    之前很多都是碎片化的学习android基础知识,也没有系统化的整理一下知识点,安卓的知识点虽然不算很多,但是肯定是又多又杂,本篇作为我个人第一个系列博客的第一篇自然要开个好头,也希望各位给出你们宝贵的意见和看法,小弟定能虚心接受,不胜感激~闲话休题,言归正传。下面我们就开始四大组件篇——活动篇正文!

四大组件之Activity

定义:包含用户界面的核心组件

功能:主要用于和用户的交互,以及产品界面的展示。

基本用法:Activity的本质是一个Java类,如:由我们创建工程生成的MainActivity;一般的每个Activity都会存在一个与它匹配的布局文件(xml文件),由它来写入我们需要Activity展示的各种控件和布局。有了布局文件之后,就需要在类里通过OnCreate方法的setContentView方法调用文件资源ID来初始化UI界面和显示。
注册:每个需要显示的Activity都需要我们在工程包下的AndroidMainifest.xml文件进行注册!(注意:程序每次打开时显示的Activity我们称为主界面,它的注册和其他Activity注册有区别)

主界面的注册方法
<activity
Android:name=”包全名.类名”>
<intent-filter>
<action android:name=”android.intent.action.MAIN”/>
<category android:name=”android.intent.category.LAUNCHER”/>
</intent-filter>
</activity>
不难发现,作为主界面显示的Activity加入了<intent-filter>标签和内部的两句声明,这也是必须的。此外如果你的应用程序里没有声明任何主活动,它也是可以安装的,只是你无法在启动器中看见或打开,这种程序一般作为第三方服务供其他应用在内部进行调用,如支付宝的快捷支付应用。


隐藏标题:一般地,程序会把我们建立工程时所设置的名字作为标题,放在活动界面的顶部,而且在我们实际项目中,通常是用不到的,所以我们要在setContentView方法之前声明,       requestWindowFeature(Window.Feature_NO_TITLE)这样就可以成功的隐藏系统标题了!
销毁Activity:一般在方法内调用finish();就可以结束当前Activity。

使用Intent实现活动的切换和活动直接的数据传递

Intent的两种用法:显示Intent和隐式Intent。

显示Intent一般使用方法
Intent intent=newIntent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
简单的两行就能实现第一个活动跳转到第二个活动界面。


隐式Intent一般使用方法
首先需要在注册第二个活动时加入标签
<activity android:name=”.SecondAcivity”>
<intent-filter>
<action android:name=”包名.ACTION_START”/>
<category android:name=”android.intent.category.DEFAULT”/>
<category android:name=”包名.MY_CATEGORY”/>
</intent-filter>
</activity>
这样我们就可以用声明的标签来启动隐式Intent
Intent intent=new Intent(“包名.ACTION_START”);
startActivity(intent);

 
活动间数据传递


1.在启动活动时,Intent中提供了一系列putExtra()方法的重载,可以将我们需要传递的数据暂存在Intent中,在打开另一个活动时,从Intent中取出即可。
具体例子:比如我们想要传递一个String字符串
String data=”Hello world!”;
Intent intent=newIntent(FirstActivity.this,SecondActivity.class);
Intent.putExtra(“extra_data”,data);//extra_data是一个标签,data是传入的数据。
startActivity(intent);
然后在SecondActivity的Oncreate方法里取出Intent存入的数据
Intent intent=getIntent();
String data=intent.getStringExtra(“extra_data”);//用String接收带extra_data标签的数据
Log.d(“SecondActivity”,data);//打印出data

2.当我们需要给上一个活动活动返回数据的时候,有一个startActivityForResult()它也是用于启动活动的,但是这个方法期望在活动销毁的时候能返回一个结果给上一个活动,该方法接收两个参数,第一个是Intent,第二个是请求码。用于在之后的回调中判断数据的来源。
例子:
第一个活动中代码
Intent intent=newIntent(FirstActivity,this,SecondActivity.class);
startActivityForResult(intent,1);
第二个活动中代码
Intent intent=new Intent();
Intent.putExtra(“data_return”,”Helloworld!”);
setResult(RESULT_OK,intent);
finish();
第一个活动接收返回数据代码
If(resultCode==RESULT_OK){
StringreturnedData=data.getStringExtra(“data_return”);
Log.d(“FirstActivity”,returnedData);
简单解释下,意思就是第一个活动用startActivityForResult打开第二个活动,第二个活动将数据放入Intent中,然后设置一个Result标签为RESULT_OK,然后第一个活动判断标签是否相同,相同就取出数据。
 
 
活动的生命周期


讲活动的生命周期,就要先介绍活动的四种状态:
1.运行状态:活动位于返回栈的栈顶。
2.暂停状态:不处于返回栈的栈顶,但仍然可见。
3.停止状态:不处于返回栈的栈顶,并且完全不可见。
4.销毁状态:从返回栈中移除并被系统回收。
 
Activity类定义了七个回调方法,覆盖了活动的生命周期的每个环节:
1.onCreate:活动第一次创建被调用
2.onStart:活动由不可见变为可见的时候调用
3.onResume:活动处于与用户交互状态时候调用
4.onPause:系统准备启动或恢复另一个活动时候调用
5.onStop:活动完全不可见的时候调用(如果新活动是一个对话框式的活动,onPause会执行,而onStop不会执行)
6.onDestroy:在活动被销毁之前调用
7.onRestart:由停止状态变为运行状态之前调用




活动的启动模式
 
启动模式:standard、singleTop、singleTask、singleInstance
1.standard:活动默认的启动模式,每当启动一个新活动,它都会进入返回栈并位于栈顶的位置,这种模式下,系统不会在乎这个活动是否已经存在于返回栈中,每次启动都会创建并都放在栈顶。
2.singleTop:当活动指定为该模式时,在启动活动时如果发现该活动已经位于栈顶,则会直接使用它而不会创建新的实例。
3.singleTask:在模式下,启动活动时如果发现已经存在该活动,就会直接使用它并且将位于它之上的活动统统出栈,如果没有发现就会新建一个实例。
4.singleIntance:在这种模式下,会有一个单独的返回栈来管理这个活动,不管是任何一个程序来访问这个活动,都共用这个返回栈,也就解决了共享活动的问题。


设置方法:在AndroidMainifest.xml文件中activity标签name之下加入声明:
Android:launchMode=” standard、singleTop、singleTask、singleInstance(四选一)”
这样就可以配置活动的启动模式了。


--------------------------------------------------------------------------------------------------


好了,关于四大组件——Activity所涉及的各个方面基本都解释到了,如果还有不全面或是解释有误的点,欢迎广大看官给予点评和建议,本人必定细心查看,纠察改错。尴尬
 
 
敬请关注下一篇连载:四大组件——BroadcastReceiver!再见

2
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12817次
    • 积分:380
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    博客专栏
    最新评论