安卓学习 之 Activity(二)
1.活动是什么
包含用户界面的组件,主要用于和用户进行交互。
2. 活动的基本用法
(1)android:id 元素当前唯一的标识符l android:width 元素宽度 android:height 元素高度。
(2)setContentView()方法给当前活动加载一个布局,必须要在AndroidManifest.xml中注册,但AS已经帮我们动态注册。
(3)Toast方法,较为简单。Toast.maketext().show()。
(4)在活动中使用Menu
- res目录下创建menu文件夹,创建Menu Resource file。添加item菜单项,菜单项包括了id与titile两个label。
- 重写OnCreateOptionMenu方法来加载布局。重写onOptionItemSelected方法来定义响应事件。
(5)销毁一个活动:Back键或finish方法。
3.使用Intent
(1)使用显式Intent
Intent是Android程序中各组件之间的一种交互方式。用于启动活动、服务以及发送广播。
Intent intent = new Intent(MainActivity.this,SecondActivity.clalss);
startAcitvity(intent);
(2)使用隐式Intent
- 在xml中设置,标签指明了当前活动可以响应com.nwu.hzk.ACTION_START这一活动,在隐式调用时必须加上标签为android.intent.category.DEFAULT。这样才能得到隐式Intent的响应。
- 系统去分析这个Intent,并找出合适的启动活动去启动。启动方法大致与显式相同,
Intent intent =new Intent(“com.nwu.hzk.ACTION_START”);
startActivity(intent);
3.更多隐式Intent的用法,比如调用浏览器,也可以用来打电话。
Intent intent =new Intent(Intent.ACTION_VIEW);
//指定Action为ACTION_VIEW
Intent.setData(Uri.parse(“http://www.baidu.com”));
(3)发送接受数据
1.传递数据:
intent.putExtra(“extra_data”,data);
第一个参数为键,第二个参数才是真正要传递的数据。
2.在另一个Activity中接收数据。
Intent intent = getIntent();
String data=intent.getStringExtra(“extra_data”);
3.返回数据给上一个活动
FirstActivity中,启动SecondActivity中增加
startActivityForResult(intent,1);
//1为请求码
SecondActivity中增加
setResult(RESULT_OK,intent);
//专门向上一个活动FirstActivity中来返回处理结果。
在 SecondActivity 被销毁之后会回调上一个活FirstActivity动的 onActivityResult()方法,因此我们需要在 FirstActivity 中重写这个方法来得到返回的数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData);}break; default:}
}
4. 活动的Th存期
- onCreate()
这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动 第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布 局、绑定事件等。
- onStart()
这个方法在活动由不可见变为可见的时候调用。
- onResume()
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的 栈顶,并且处于运行状态。
- onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
- onStop()
这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop() 方法并不会执行。
- onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
7.onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。以上七个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三种生存期。
5. 活动启动方式
通过在AndroidMAnifest.xml中标签中指定android:launchMode来确定启动方式。
1.standard:
系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
2.singleTop:
在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。
3.singleTask:
每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
4.singleInstance
在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实 例的问题。
6. 活动最佳实例
1.知晓在当前哪一个活动
新建一个 BaseActivity 继承自
Activity,然后在 BaseActivity 中重写 onCreate()方法
Log.d("BaseActivity", getClass().getSimpleName());
让 BaseActivity 成为 项目中所有活动的父类。现在每当我们进入到一个活动的界面,该活动的类名就会被打印出来,这样我们就可以 时时刻刻知晓当前界面对应的是哪一个活动了。
2.随时随地推出程序
解决连按n次 Back 键才退出所有activity。按 Home 键只是把程序挂起,并没有退出程序的问题。
新建一个 ActivityCollector:
public class ActivityCollector {public static List<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity activity) {activities.add(activity);}public static void removeActivity(Activity activity) { activities.remove(activity);}public static void finishAll() {for (Activity activity : activities) { if (!activity.isFinishing()) {activity.finish();}
}
在 BaseActivity 的 onCreate()方法中调用了 ActivityCollector 的 addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在 BaseActivity 中重写 onDestroy()方法, 并调用了 ActivityCollector 的 removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); ActivityCollector.addActivity(this);}@Overrideprotected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this);}
}
然后只需要继承BaseActivity并调用 ActivityCollector.finishAll()方法就可以了。
3.启动活动的最佳写法
解决不同活动由不同的人编写的问题,这是你有两种方法:一个是你自己去阅读 SecondActivity 中的代码,二是询问负责编写 SecondActivity 的同事。
public class SecondActivity extends BaseActivity {public static void actionStart(Context context, String data1, String data2) { Intent intent = new Intent(context, SecondActivity.class); intent.putExtra("param1", data1);intent.putExtra("param2", data2); context.startActivity(intent);}
}
SecondActivity 所需要的数据全部都在方法参数中体现出来了,这样即使不用阅读 SecondActivity 中的代码,或者询问负责编写 SecondActivity 的同事,你也可以非常清晰地知道启动 SecondActivity 需要传递哪些数据。
button1.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
}
});
安卓学习 之 Activity(二)相关推荐
- 安卓学习笔记---Activity
由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的ac ...
- 2020年安卓学习笔记目录
文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...
- 安卓学习笔记07:事件处理、窗口跳转与传递数据
文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...
- 安卓学习笔记04:安卓平台架构
文章目录 零.学习目标 一.安卓平台架构 (一)安卓平台架构简述 1.Linux 内核 2.硬件抽象层 (HAL) 3.安卓运行时(Android Runtime) 4.原生 C/C++ 库 5.Ja ...
- 安卓学习笔记03:安卓应用目录结构
文章目录 零.学习目标 一.安卓应用视图 1.Project视图 2.Package视图 3.Android视图 二.安卓应用目录结构 (一)项目清单目录 - manifests (二)Java源程序 ...
- 安卓学习文档收集汇总
安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...
- 25000字总结Android优秀的第三方框架、各种学习资料汇集 二 Camera、Video、指纹、聊天IM、投屏等等
前言 前几天总结了Android中常用到的系统组件.Design组件.自定义组件等等系列 点击跳转地址: 25000字总结Android优秀的第三方框架.各种学习资料汇集 一 系统组件.Design组 ...
- 【安卓学习之常见问题】android路径及文件问题
█ [安卓学习之常见问题]android路径及文件问题 █ 系列文章目录 提示:这里是收集了安卓学习之常见问题的相关文章 [安卓学习之常见问题] 界面(Activity/Fragment)之间的数据传 ...
- .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示
原文:.Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示 xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块:•android中的io ...
最新文章
- 入门单片机选择51还是stm32?入门单片机有哪些好的教学视频?
- WebDAV服务漏洞利用工具DAVTest
- Problem 61 修改进程的显示名称
- ListView 排序
- 在cmd中使用指令来执行jar包
- [linux-nopage]内存映射虚拟字符设备驱动【P119】
- 克服SOA实施过程中的障碍
- 【51Nod - 1163】最高的奖励 (贪心+优先队列 或 妙用并查集)
- ICCV2021 新增数据集汇总 | 含时序动作定位、时空行为检测、弱光目标检测等!...
- 关于PostgreSQL空间膨胀的研究
- BUU BRUTE 1
- 人脸检测-MTCNN算法笔记和代码解读
- 将无线鼠标改造成有线鼠标
- Summary: Rendering Pipeline简单总结一下渲染管线流程图
- 2023浙江工商大学计算机考研信息汇总
- 【PPT 资源下载】甲骨文数据库大会精彩主题分享
- nexus搭建npm私服
- android ui v2ex,V2EX-android
- (学习笔记)手把手教你学51单片机:C语言基础以及流水灯的实现
- 地籍管理 : 宗地数据处理的一般步骤