【问题标题】:Why Other Activity Life Cycle are not being called other than OnCreate() method为什么除了 OnCreate() 方法之外没有调用其他活动生命周期
【发布时间】: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
}

【问题讨论】:

  • 您如何检测是否正在调用onPauseonResume 等...?当您说“失败”时,您的意思是应用程序崩溃了吗?
  • 失败表示未触发。我正在使用 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


【解决方案1】:

我不知道到底发生了什么,但是在我关闭我的 Visual Studio 然后用我拥有的项目再次打开它之后,现在正在调用其他生命周期。我认为问题出在 Visual Studio 中。

在重新启动之前,我清理了它然后重建然后部署到模拟器。我在我的物理设备中进行了相同的部署,但结果相同,其他生命周期没有运行。

重启后,同样的过程,现在好了。

Clean then Rebuild 不起作用,但重新启动 Visual Studio 很棒:D

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2013-07-25
    • 2019-04-17
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多