"浅谈Android"第二篇:活动(Activity)
- 什么是活动(Activity)
- 活动(Activity)用法
- 活动(Activity)生命周期
- 活动(Activity)启动模式
- 活动(Activity)管理
1,什么是活动(Activity)
 活动(Activity)是最容易吸引用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互,一个应用程序可以包含零个或者多个活动。这是我对活动的理解,那我们再看看官方文档是怎么定义的:“An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.”大概意思是说,Activity是一个可以让屏幕提供用户交互动作的组件,比如打电话、照相、发送邮件和查看地图等。简单来说,我们在应用程序中能看到的内容,绝大多数都是Activity组件提供的。
2,活动(Activity)用法



3,活动(Activity)生命周期

 
 - 运行状态
- 暂停状态
- 停止状态
- 销毁状态
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroy()
- onRestart()
- 完整生存期:活动在onCreate()和onDestroy()方法之间所经历的
- 可见生存期:活动在onStart()和onStop()方法之间所经历的
- 交互活动期:活动在onResume()和onPause()方法之间所经历的
如图:
  
让我们用代码来体验下Activity的生命周期,首先我们先创建一个类来继承Activity父类,用日志来打印出活动的七个回调方法。定义了两个按钮,一个是启动正常的Activity,一个启动对话框的Activity,布局界面代码就不给出了,然后编写点击事件代码。
 public class MainActivity extends Activity {
     public static final String TAG = "MainActivity";
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Log.d(TAG, "onCreate");
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.activity_main);
         if (savedInstanceState != null) {
             String tempData = savedInstanceState.getString("data_key");
             Log.d(TAG, tempData);
         }
         Button startNormalActivity = (Button) findViewById(R.id.start_normal_activity);
         Button startDialogActivity = (Button) findViewById(R.id.start_dialog_activity);
         startNormalActivity.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this, NormalActivity.class);
                 startActivity(intent);
             }
         });
         startDialogActivity.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this, DialogActivity.class);
                 startActivity(intent);
             }
         });
     }
     @Override
     protected void onStart() {
         super.onStart();
         Log.d(TAG, "onStart");
     }
     @Override
     protected void onResume() {
         super.onResume();
         Log.d(TAG, "onResume");
     }
     @Override
     protected void onPause() {
         super.onPause();
         Log.d(TAG, "onPause");
     }
     @Override
     protected void onStop() {
         super.onStop();
         Log.d(TAG, "onStop");
     }
     @Override
     protected void onDestroy() {
         super.onDestroy();
         Log.d(TAG, "onDestroy");
     }
     @Override
     protected void onRestart() {
         super.onRestart();
         Log.d(TAG, "onRestart");
     }
     @Override
     protected void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         String tempData = "Something you just typed";
         outState.putString("data_key", tempData);
     }
 }






@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "Something you just typed";
outState.putString("data_key", tempData);
}
执行以上代码,数据是保存下来了,那么应该在哪里恢复呢,你可以细心的观察到,在onCreate()方法里其实也有一个Bundle类型的参数,这个参数在一般情况下都是null,但是当活动被系统回收之前有通过onSaveInstanceState()方法来保存数据的话,这个参数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法来将数据取出即可。
     if (savedInstanceState != null) {
             String tempData = savedInstanceState.getString("data_key");
             Log.d(TAG, tempData);
         }
4,活动(Activity)启动模式




5,活动(Activity)管理
 public class BaseActivity extends Activity{
     private boolean allowFullScreen=true; //是否允许全屏
     private boolean allowDestroy=true; //是否允许销毁    
     @SuppressWarnings("unused")
     private View view;
     public boolean isAllowFullScreen() { //获取是否全屏
         return allowFullScreen;
     }
     public void setAllowFullScreen(boolean allowFullScreen) { //设置是否全屏
         this.allowFullScreen = allowFullScreen;
     }
     public boolean isAllowDestroy() { //获取是否销毁
         return allowDestroy;
     }
     public void setAllowDestroy(boolean allowDestroy) { //设置是否销毁
         this.allowDestroy = allowDestroy;
     }
     public void setAllowDestroy(boolean allowDestroy, View view) { //设置是否销毁(重载)
         this.allowDestroy = allowDestroy;
         this.view = view;
     }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         allowFullScreen = true;
         AppManager.getAppManager().addActivity(this); //添加Activity到堆栈
     }
     @Override
     protected void onStop() {
         super.onStop();
     }
     @Override
     protected void onStart() {
         super.onStart();
     }
     @Override
     protected void onRestart() {
         super.onRestart();
     }
     @Override
     protected void onResume() {
         super.onResume();
     }
     @Override
     protected void onPause() {
         super.onPause();
     }
     @Override
     protected void onDestroy() {
         AppManager.getAppManager().finishActivity(this); // 结束Activity&从堆栈中移除
         super.onDestroy();
     }
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) { //监控返回键,并且包含视图组件
             if (!allowDestroy) {
                 return false;
             }
         }
         return super.onKeyDown(keyCode, event);
     }
 }
6,总结
阅读扩展
"浅谈Android"第二篇:活动(Activity)的更多相关文章
- "浅谈Android"第一篇:Android系统简介
		近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ... 
- 浅谈android代码保护技术_ 加固
		浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ... 
- 浅谈Android应用保护(一):Android应用逆向的基本方法
		对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ... 
- 安卓开发_浅谈Android动画(四)
		Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ... 
- 浅谈Android应用性能之内存
		本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ... 
- 浅谈Android五大布局
		Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ... 
- [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout
		在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ... 
- [转]浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout
		Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ... 
- 浅谈Android保护技术__代码混淆
		浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ... 
随机推荐
- JavaScript中如何中断forEach循环
			先来看下forEach的实现 // Production steps of ECMA-262, Edition 5, 15.4.4.18// Reference: http://es5.github. ... 
- Revit中如何添加水平仰视平面视图
			在Revit平面视图中视角是俯视视角,但是在一些特殊的情况下,我们可能需要创建仰视视角的平面视图,例如我们需要向上看天花板的灯具布置的时候,下面举例说明添加仰视平面视图的方法. 如图在模型中有一楼板跟 ... 
- Oracle User Calls 和 Executions 两个概念的区别
			User calls = (User session Login + Parsing within a session + Executions of sql's/Cursors ) per seco ... 
- 数据标准化 Normalization
			数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能 ... 
- 【LeetCode】268. Missing Number
			Missing Number Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one ... 
- H5长按事件
			let timeOutEvent = 0 $(function () { $('#debug').on({ touchstart: function (e) { setTimeout(function ... 
- How to get URL parameters with Javascript?
			function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '( ... 
- android中自定义view---实现竖直方向的文字功能,文字方向朝上,同时提供接口,判断当前touch的是哪个字符,并改变颜色
			android自定义view,实现竖直方向的文字功能,文字方向朝上,同时提供接口,判断当前touch的是哪个字符,并改变颜色. 由于时间比较仓促,因此没有对代码进行过多的优化,功能远远不如androi ... 
- Xcode编译错误集锦
			1.在将ios项目进行Archive打包时,Xcode提示以下错误: [BEROR]CodeSign error: Certificate identity ‘iPhone Distribution: ... 
- 配置ST3在浏览器中打开
			打开Preferences - 「Key Bindings - User」,添加此行: {"keys": ["f1"],"command": ... 
