【发布时间】:2018-06-27 02:58:43
【问题描述】:
所有活动生命周期都被覆盖,所以我希望它们会在某个时候被触发,但它们不会。尽管我只需要 OnResume() 方法,但我试图覆盖所有这些以进行测试。有人已经遇到过这种情况并解决了吗?我根本无法触发它:(
我试图触发它们的原因:
- 按下主页按钮触发 OnPause 和 OnStop - 失败
- 返回 App 触发 OnResume、OnRestart - 失败
- 按下后退按钮触发 OnPause 和 OnStop - 失败
- 返回 App 触发 OnResume、OnRestart - 失败
- 进行下一个活动以触发 OnPause 和 OnStop - 失败
- 按下后退按钮以触发上一个活动的 OnResume - 失败
- 重置应用以触发 OnCreate、OnResume - OnCreate 成功,OnResume 失败
-Kill 应用触发 OnPause、OnStop 和 OnDestroy- 失败
发生了什么事?我试图将 NoHistory 设置为 true,但它只会触发 OnCreate。将其设置为 false 并返回上一期
代码:
using System;
using Android.App;
using Android.OS;
using Android.Widget;
using Android.Content;
using Android.Views;
using BLL;
using Android.Views.InputMethods;
using static Android.Views.View;
using Android.Preferences;
namespace H2POS
{
/// <summary>
/// Created By: Makath Valdez
/// </summary>
[Activity(Label = "Activity_Login", NoHistory = false, ScreenOrientation = Android.Content.PM.ScreenOrientation.SensorLandscape, Theme = "@style/Theme.FullScreenBaseDesign")]
public class Activity_Login : Activity
{
#region Global Variables
KeypadHandler keypadHandlerUser;
KeypadHandler keypadHandlerPass;
EditText etUsername;
EditText etPassword;
//keypad initialization
Button btn1;
Button btn2;
Button btn3;
Button btn4;
Button btn5;
Button btn6;
Button btn7;
Button btn8;
Button btn9;
Button btn0;
Button btn00;
ImageButton btnDel;
Button btnLogin;
LinearLayout llUsername;
LinearLayout llPassword;
#endregion
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Layout_Login);
Window.SetSoftInputMode(SoftInput.StateAlwaysHidden);
try
{
m2_initialization();
m4_setUpAllClickable();
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
bool databaseInitialized = prefs.GetBoolean(ENTITIES.STATIC.ENT_SystemValues.databaseInitialized, false);
if (!databaseInitialized)
{
new BLL_HardCode().upsertSystemValues();
ISharedPreferences prefs2 = PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = prefs2.Edit();
editor.PutBoolean(ENTITIES.STATIC.ENT_SystemValues.databaseInitialized, true);
// editor.Commit(); // applies changes synchronously on older APIs
editor.Apply(); // applies changes asynchronously on newer APIs
}
}
catch (Exception e)
{
UIHelper.ToastMessage(this, ENTITIES.STATIC.ENT_NegativeResponse.somethingWentWrong);
}
}
protected override void OnResume()
{
UIHelper.ToastMessage(this, "OnResume was called");
base.OnResume();
//check if auto date time is enabled
new AccountSettings().IsAutoDateTimeEnabled(this);
}
protected override void OnPause()
{
UIHelper.ToastMessage(this, "OnPause was called");
base.OnPause();
}
protected override void OnStop()
{
UIHelper.ToastMessage(this, "OnStop was called");
base.OnStop();
}
protected override void OnDestroy()
{
UIHelper.ToastMessage(this, "OnDestroy was called");
base.OnDestroy();
}
protected override void OnRestart()
{
UIHelper.ToastMessage(this, "OnRestart was called");
base.OnRestart();
}
}
//Other code removed
}
【问题讨论】:
-
您如何检测是否正在调用
onPause、onResume等...?当您说“失败”时,您的意思是应用程序崩溃了吗? -
失败表示未触发。我正在使用 Visual Studio 和 Xamarin 以及一个断点来检查 :) 并且还有一个 ToastMessage 以确保
-
我可以看到 ToastMessage 在某些情况下没有出现(例如
onDestroy)。我的愚蠢调试只是在其中放一个System.out.println("TEST: onResume");。从来没有见过你描述的问题。也许发布其中一个覆盖的代码,以便有人可以尝试复制它? -
代码供参考。只是为了回答@TylerV,如果您将 Toast 放在 base.OnDestroy 或 super.OnDestroy 之前,它将显示在 OnDestroy 上,因此它仍然可用:)
-
启动应用程序后,您会做什么?你点击什么了吗?
标签: android xamarin xamarin.android android-lifecycle activity-lifecycle