序言:
生命周期
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.退出当前Activity时:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
以上提到的函数皆可以在Avtivity里面重写,如图:
新建的Activity默认只有Oncreate函数。
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Util; namespace FirstAndroidAPP
{
[Activity(Label = "FirstAndroidAPP", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
int count = ; 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++); };
} protected override void OnStart()
{
Log.Debug("OnStart", "Activity重新回到前台");
base.OnStart();
} protected override void OnResume()
{
Log.Debug("OnResume", "OnResume called");
base.OnResume();
} protected override void OnStop()
{
Log.Debug("OnStop", "OnStop called");
base.OnStop();
} protected override void OnDestroy()
{
Log.Debug("OnDestory", "系统被销毁");
base.OnDestroy();
} protected override void OnRestart()
{
Log.Debug("OnRestart", "系统重新回到前台");
base.OnRestart();
} }
}
Activity四种启动方式
我们可以利用SingTask的特性来完成一些小功能,比如平时大家看到的”再按一次退出应用 ”,其实就是监听Back键,在短时间内连续点击的操作。
新建一个Activity,取名SecondActivity,内容很简单
[Activity(Label = "SecondActivity")]
public class SecondActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Second);
// Create your application here
} DateTime? lastBackKeyDownTime;//记录上次按下Back的时间
public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back && e.Action == KeyEventActions.Down)//监听Back键
{
if (!lastBackKeyDownTime.HasValue || DateTime.Now - lastBackKeyDownTime.Value > new TimeSpan(, , ))
{
Toast.MakeText(this, "再按一次退出程序", ToastLength.Short).Show();
lastBackKeyDownTime = DateTime.Now;
}
else
{
Intent intent = new Intent();
intent.SetClass(this, typeof(MainActivity));
StartActivity(intent);
}
return true;
}
return base.OnKeyDown(keyCode, e);
} }
在MainActivity中点击Button,跳转到SecondActivity中
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
{
Intent intent = new Intent(this, typeof(SecondActivity));
StartActivity(intent);
};
} protected override void OnNewIntent(Intent intent)
{
Finish();
}
效果如图:
在这里补充一点儿SingTask的描述:
自此,可以确认是被销毁了,哈哈哈
Activity传值
最后
到时候再和大家分享一些遇到的问题,写博速度有点儿慢,然后就是文章排版头痛。
望大家支持,3Q。
吐槽一点儿,为什么博客园分类没有Xamarin 系列?