弹出 AlertDialog 对话框,观察 Activity 生命周期;当 Activity局部被遮挡时触发OnPause()暂停生命周期

MainActivity.cs 关键点击事件代码
private void Button_Click(object sender, EventArgs e)
{
//Toast.MakeText(this, "FoxDevelop", ToastLength.Long).Show();
var builder = new Android.App.AlertDialog.Builder(this);
builder.SetTitle("友情提示")
.SetMessage("请小心操作。这个步骤没法复原。");
builder.SetCancelable(true);
//取消按钮
builder.SetNegativeButton("取消", (s, d) =>
{
Toast.MakeText(this, "你选择了取消。", ToastLength.Short).Show();
});
//确定按钮
builder.SetPositiveButton("确定", (s, d) =>
{
Toast.MakeText(this, "你选择了确定。", ToastLength.Short).Show();
});
builder.Create();
builder.Show();
}Code language: JavaScript (javascript)
完整MainActivity(加上生命周期日志打印)
using Android.App;
using Android.OS;
using Android.Widget;
using AndroidX.AppCompat.App;
namespace AlertDialogDemo
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
Button btn = FindViewById<Button>(Resource.Id.MyButton);
btn.Click += Button_Click;
}
private void Button_Click(object sender, EventArgs e)
{
var builder = new AlertDialog.Builder(this);
builder.SetTitle("友情提示")
.SetMessage("请小心操作。这个步骤没法复原。");
builder.SetCancelable(true);
builder.SetNegativeButton("取消", (s, d) =>
{
Toast.MakeText(this, "你选择了取消。", ToastLength.Short).Show();
});
builder.SetPositiveButton("确定", (s, d) =>
{
Toast.MakeText(this, "你选择了确定。", ToastLength.Short).Show();
});
builder.Create();
builder.Show();
}
// 生命周期:暂停(界面被局部遮挡,例如弹出AlertDialog就会触发)
protected override void OnPause()
{
base.OnPause();
Android.Util.Log.Debug("LifeCycle", "触发 OnPause() 暂停");
}
// 生命周期:恢复
protected override void OnResume()
{
base.OnResume();
Android.Util.Log.Debug("LifeCycle", "触发 OnResume() 恢复");
}
}
}Code language: HTML, XML (xml)
activity_main.axml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/MyButton"
android:text="弹出对话框"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>Code language: HTML, XML (xml)
AlertDialog只是局部遮挡Activity,Activity不会销毁,进入暂停状态,执行
OnPause();关闭对话框后页面恢复,执行
OnResume()。只有页面完全看不见(打开新Activity、按Home回到桌面),才会走到
OnStop()。
区分
- Toast:短暂浮动提示,不会触发Activity的OnPause
- AlertDialog对话框:遮挡一部分页面 → 触发OnPause暂停生命周期
打开Android日志窗口,点击按钮弹出对话框,就可以看到日志输出
触发 OnPause();关闭对话框,输出触发 OnResume()。
Previous: 创建布局-弹出浮动框Toast
Next: 日志工具类