学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章

已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路。当然Xamarin android和java语言开发的android基本上一样的,用的语言不同而已,最终编译的还是原生的android。当初学这玩意很多东西都不是很了解,现在回过头来看以前的自己真是很傻逼啊,希望写这篇文章也是一样的,过段时间技术有了更深的理解和应用,再回过头来看看也是挺有意思的,希望也能够帮助刚开始接触Xamarin android的同学们更好的理解android的activity声明周期。就目前xamarin
的发展趋势而言,的确不是很好,开发的虽然是原生android,性能和体积的确堪忧。但是作为一个IT从业者,对技术的热爱不应该减少。就我个人而言,很多人在学习xamarin android之所以感到困难,1.国内大部分IT从业者英语基础太差(我也是一样的英语菜比),2.相关的资源太少,遇到的问题等不到很好的解答。3.行业趋势发展并不乐观,更多的企业还是愿意去选择java开开发Android。

1.首先看一下菜鸟所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的):

ps:图来源于菜鸟android教程

2. 认识activity的生命周期主要包含一些三种状态:

(1)运行态(Resumedstate)

   此时Activity程序显示在屏幕前台,并且具有焦点,可以与用户的操作进行交互,如向用户提供信息、捕获用户单击按钮的事件并做处理。

(2)暂停态(PausedState)

此时Activity程序失去了焦点,并被其他处于运行态的otherActivity取代在屏幕显示,但otherActivity程序并没有覆盖整个屏幕或者具有半透明的效果—此状态即为暂停态。处于暂停态的Activity仍然对用户可见,并且是完全存活的(此时Activity对象存留在内存里,保留着所有状态与成员信息并保持与窗口管理器的连接)。如果系统处于内存不足的情况下,会杀死这个Activity。

(3)停止态(StoppedState)

当Activity完全被另一个otherActivity覆盖时(此时otherActivity显示在屏幕前台),则处于停止态。处于停滞态的Activity依然是存活的(此时Activity对象依然存留在内存里,保留着所有的状态和与成员信息,但没有与窗口管理器保持连接),而且它对用户是不可见的,如果其他地方需要内存,系统会销毁这个Activity。

3. 实例:

终于我们进入到最重要的一个环节,首先我们新建一个Demo。重写以下的方法,xamarin android默认只是重写了一个OnCreate方法。通过重写的这些方法来管理资源保存应用程序状态;注意:这些方法会阻塞UI,尽量在方法中避免处理耗时任务。

  1. OnCreate() 创建View、初始化变量等,Activity第一个方法;
  2. OnStart()     当应用程序可见时,系统会调用这个方法;
  3. OnResume() & OnPause() 当其他Activity挡住当前view时,系统会调用,OnPause();当用户再次获取Activity焦点时会调用OnResume()方法;
  4. OnPause() 方法中一定要停止硬件设备的调用和线程资源释放,如Camera 、动画、线程、时钟等;
  5. OnStop() 当Activity不在是活动的时候,其他Activity遮挡完全不可见时,系统调用OnStop();
  6. OnDestroy() 系统销毁App前执行的最后一个方法;
  7. OnRestart()   该Activity中没有被Destroy时,再调用该Activity时会调用该方法;

注意: vs中的输入可以看到Debug.Write() 方法输出的内容。要引入C#DeBug的命名空间是System.Diagnostics.Debug

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Util;
using Debug = System.Diagnostics.Debug;
namespace AndroidLifeDemo
{
[Activity(Label = "AndroidLifeDemo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
int count = 1; protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); // Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main); // Get our button from the layout resource,
// and attach an event to it
Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };
Debug.Write("OnCreate", "首先执行创建");
}
protected override void OnStop()
{
Debug.WriteLine("OnStop","程序停止运行");
base.OnStop();
} protected override void OnStart()
{
Debug.WriteLine("OnStart", "程序开始");
base.OnStart();
}
protected override void OnResume()
{
Debug.WriteLine("OnResume","重新开始启动");
base.OnResume();
} protected override void OnDestroy()
{
Debug.WriteLine("OnDestory", "应用退出,直接销毁");
base.OnDestroy();
} protected override void OnPause()
{
Debug.WriteLine("OnPause","程序暂停");
base.OnPause();
}
}
}

下面我们来看一下常用的几个操作的具体所触发的方法。

1.首先我一开始启动这个Demo时所触发的方法依次是:OnCreate -> OnStart -> OnResume,看一下vs中的输出:

2.程序没有退出,锁屏的时间到了,直接黑屏了,这个时候执行的方法依次OnPause -> OnStop 程序暂停->程序停止我们可以在输出的窗口看到:

3.解锁之后,程序的Activity立即显示在我们眼前,执行的方法是:OnRestart->OnStart ->OnReSume 输出中可以看到:

4.按下Back键,返回键代表这这个程序的结束,这个时候程序先后执行这个几个方法:OnPause->OnStop->OnDestory,也就说比锁屏多了个Destory直接销毁了。看一下输出

5.按下Home键呢,这种情况是非常常见的,当我们看着NBA直播的时候,有个搞事的打电话了,这个时候屏幕自动切换到电话的Activity,这时候程序执行的方法是:OnPase -> OnStop 程序暂停->程序停止,也就是说和锁屏截屏是一样的。

上面说了这么多情况,可以总结出来的东西就非常简单了,分为下面四种情况

  • 程序不见了(但是没退出):先后执行了OnPause ->OnStop
  • 程序显示到屏幕上(但不是第一启动):先后执行了OnReStart -> onStart -> onResume
  • 程序直接退出了:先后执行了OnPause->OnStop
  • 程序首次启动(也就是程序已经退出了再启动):OnCreate->OnStart->OnResume

这里你会发现的的是,当你按下Home键之后,再次进入程序之后,你会发现状态却没有保持,比如在EditText写了一些文本,Home键之后再次进入文本消失了,至于怎么解决,办法很简单。

好了Xamarin android Activity的生命周期差不多就是这么多,还是去体会一下,再次看一下前面那张图是不是有新的感觉呢?

参考文章:http://kb.cnblogs.com/page/70125/    http://www.cnblogs.com/CallMeUncle/p/5511093.html   http://www.runoob.com/w3cnote/android-tutorial-activity.html

xamarin Android activity生命周期详解的更多相关文章

  1. Android Activity 生命周期详解

    学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...

  2. Android关于Activity生命周期详解

    子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...

  3. Android之Activity生命周期详解

    Activity的生命周期方法: onCreate()--->onStart()--->onResume()--->onPause()--->onStop()--->on ...

  4. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  5. 【转】Activity生命周期详解

    三个循环 提供两个关于Activity的生命周期模型图示帮助理解:                                           图1 图2 从图2所示的Activity生命周期 ...

  6. Android学习笔记:Activity生命周期详解

    进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.co ...

  7. Android四大组件之---activity生命周期详解

    废话不多说, 先来一张Google提供的一张经典的生命周期流程图: 有的朋友可能看英文的有点费劲,再提供一张中文版的  O(∩_∩)O 相信已经很多人对这张图再熟悉不过了,下面笔者按照自己的理解并结合 ...

  8. Activity生命周期详解

    http://blog.csdn.net/liuhe688/article/details/6733407 onPause 回到 onResume 的过程“在一般的开发中用不上”,但是作为开发者还是有 ...

  9. Xamarin android CardView的使用详解

    android 5.0新增加的一个控件CardView,在support v7兼容包中,意思就是卡片View,虽然可以设置阴影,圆角等等样式,但是我们也可以自己写出来,谷歌工程师之所以出这个,肯定是帮 ...

随机推荐

  1. win10下安装java jdk,tomcat

    1.安装java jdk 去官网下载java jdk(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

  2. [flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法

    一周时间快速阅读了400页的<javascript基础教程>,理解了主要概念.虽然对jquery.ajax.json这些方法的运用还不熟练,但在理清了概念之后解决了一个很久之前的疑问. 我 ...

  3. iscroll遇到的两个坑

    最近移动端闪付遇到的两个坑做下总结: 1.使用iscroll后,滑动并没有生效 解决方案: 首先要查看:结构是否正确: <div id="wrapper">   //w ...

  4. Java编程学习技巧和方法总结

    干货:必须要有反馈,不断调整,多读书,多些笔记. 解释:不练习你以为你能掌握?笑话,只有自己根据一个个小目标不断的敲,运行,给予你反馈,这样才会真的进步. 纸上谈Java,是永远停止在口.   关于笔 ...

  5. 洛谷最短路计数SPFA

    题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...

  6. 【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign

    上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...

  7. 数据库索引------Hash索引的使用限制

    1.hash索引必须进行二次查找. 2.hash索引无法进行排序. 3.hash索引不支持部分索引查找也不支持范围查找. 4.hash索引中hash码的计算可能存在hash冲突.

  8. ThinkPHP5.0 实现 app支付宝支付功能

    前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助, 不懂的可以先去支付平台看一下支付宝支付的文档,我是下的d ...

  9. SQL Server学习之路(一):建立数据库、建立表

    0.目录 1.前言 2.建立数据库 2.1 通过SSMS建立数据库 2.2 通过SQL语句建立数据库 3.建立表 3.1 通过SSMS建立表 3.2 通过SQL语句建立表 1.前言 配置是win10+ ...

  10. Guice之IOC教程

    Guice 在上一篇博客中, 我们讲解了Spring中的IOC示例与实现, 本文着重介绍Guice注入以及与Spring中的差异. Guice是Google开发的, 一个轻量级的依赖注入框架, 跟Sp ...