当前位置: 首页 > 知识库问答 >
问题:

使用 Xamarin 的 Android Application Crash Management

仲孙华奥
2023-03-14

一般场景:

在使用xamarin开发android应用程序时,我们倾向于使应用程序崩溃多次,这种行为完全可以接受和正常。

但是有时候,当我从第一个活动转到第二个活动时。在第二个活动中,如果应用程序崩溃,那么在下一次运行时,应用程序将从第二个活动开始,而它应该从第一个活动开始。请注意第一个活动:mainLauncher属性设置为TRUE。

应用:

1 st Activity = Splash Screen;

2 nd Activity = Login Screen; [sets a global appication variable User ID]

3 rd Activity = User Profile [fetch data from database using User ID];

4 th Activity = preference page, settings which saves username n password from login form.

==============================================================================

问题:

在运行应用程序时,流程应该根据给定的活动进行,当我在登录页面上输入正确的凭据时,它会保存我的(int)UserID。使用这个UserID,我获取用户的详细信息,并在第三个活动中显示它们。

但有时如果应用程序在第3个活动上崩溃,并且当我重新启动应用程序时,它不会从启动屏幕开始,而是从它崩溃的活动(第3个活动)或前一个活动(第3个活动的调用者,并不总是LoginForm)从活动被调用的地方。

现在的问题是,由于我从未收到LoginPage,所以从未输入登录详细信息,所以(int)UserID被设置为0/NULL,因此没有从数据库中提取数据。将第三个活动(概要活动)上的所有字段显示为空白

我的处理方案:

因此,为了处理这个问题,我重写了OnResume()并检查用户ID,即如果用户ID为0,则加载LoginScreen。这工作非常好。

但是现在,当我手动退出应用程序时,通过杀死processID,配置文件屏幕仍然保留,它调用OnResume();再一次当我再次注销时,加载登录屏幕,。。。。

这是一个循环。现在我无法通过终止<code>processID</code>退出应用程序,请帮助我找到解决此问题的方法

抱歉这么长的问题,但是我没有找到比这更好的解释方式,希望我的朋友们不要介意。

共有1个答案

黄俊雄
2023-03-14

(由OP在问题编辑中回答。转换为社区wiki答案。请参阅没有答案的问题,但问题在评论中解决(或在聊天中扩展))

该报道写道:

我设法解决了这个问题,并将用一个简单的例子来解释。

类 clsMainProjectLibrary :

这是主库,我们定义了一个函数,可以在任何活动中调用,这样我们就可以重用代码。

clsMainProjectLibrary
{
  //This variable is set by the calling activity to check if user has opt for exiting the     application or actually application has crashed.
  public static bool isExit; 
  // My Global Application variable which get assigned when user successfully log-ins else is
  public static int intUserID; 
    public Intent ApplicationCrashHandler(Activity actForm)
    {
      if (clsFunctionaLibA.isExit == false)
      {
       Intent intentMyFirstForm = new Intent(actForm,typeof(actMyFistForm));
       intentMyFirstForm.SetFlag(ActivityFlags.ClearTop & ActivityFlags.NewTask);
       return intentMyFirstForm;
      }
      else
      {
       Intent blankIntent = new Intent();
       blankIntent.SetFlags(ActivityFlags.ClearTop);
       int intPID = Android.OS.Process.MyPid();
       Android.OS.Process.KillProcess(intPID);
       return null;
      }
    }
  }

**行为我的自定义活动.cs : **

这是我的自定义活动,在此活动中我们将调用我们的Application ationCrashHandler()。所以每当这个活动崩溃或默认启动时,它应该加载我的actMyFirstForm

[Activity(Label = "Profile Details",MainLauncher=false)]
 public class actMyCustomActivity : Activity
 {
   clsMainProjectLibrary objMainProjectLibrary = new clsMainProjectLibrary();
   protected override void OnCreate(Bundle bundle)
   {
     // Put your all code here... what u want
   }

   protected override void OnResume()
   {
    if (clsMainProjectLibrary.intUserID == 0)
    {
      StartActivity(objMainProjectLibrary.ApplicationCrashHandler(this));
    }
    base.OnResume();
   }

   public override bool OnCreateOptionsMenu(IMenu menu)
   {
     //here you have your exit Menu.
   }

   public override bool OnOptionsItemSelected(IMenuItem item)
   {
     //code for user clicking on Exit.
     :
     :
     case 'Exit' : 
                  clsFunctionaLibA.isExit = true;
                  int intPID = Android.OS.Process.MyPid();
                  Android.OS.Process.KillProcess(intPID);

     :
     :
   }
 }

====================================================================

**此代码适用于我...**

它检查UserID=0是否有值,以及用户是否单击了退出菜单。我们需要在不加载所需屏幕的情况下完全退出应用程序。

这可能不是最好的解决方案,或推荐的解决方案,但这对我有用......

如果有任何合法的方法来解决这个问题,请让我拒绝,这样我就可以相应地修改我的代码。

 类似资料:
  • 本文向大家介绍Xamarin.Android 开始使用Xamarin Studio,包括了Xamarin.Android 开始使用Xamarin Studio的使用技巧和注意事项,需要的朋友参考一下 示例 浏览到文件>新建>解决方案,以打开新的项目对话框。 选择“ Android应用”,然后按“下一步”。 通过设置应用名称和组织ID来配置您的应用。选择最适合您需求的目标平台,或将其保留为默认值。按

  • 我有一个spring boot后端,我想为它实现一个SSEendpoint。我想使用基于Xamarin表单的应用程序使用这个endpoint。 我设法为双方实现了一些例子,但是,我没有在应用程序上收到任何消息。 对于后端部分,我实现了以下示例: 注意:我特意以达到默认30秒超时的方式实现它。使用postman调用此方法,它将加载所述30秒并同时显示所有已发送的消息: 在我的应用程序部分,我使用了S

  • 我尝试在我的Xamarin Ui测试中以编程方式启用/禁用wifi。< br >我已经找到了这个:Android:如何以编程方式启用/禁用Wifi或互联网连接。但是它似乎根本不起作用。< br> 我还尝试了这样的方法: 第一行 (Android.App.Application.Context) 会引发一个异常: 我正在使用以下命名空间: 我的项目引用了< code>Mono。Android。

  • 我将在UWP(Windows 10物联网)中为我的树莓创建一个应用程序,以显示网络视图(如Youtube)。而且,有了这个应用程序,我想为我的Android创建一个Xamarin应用程序来控制/管理我的UWP应用程序。 我只是想知道是否有可能(没有Web服务)将我的Android应用程序直接连接到我的UWP应用程序(LAN连接)(IP到IP)。 例如,我希望当我在youtube按钮上的Androi

  • 我正在尝试在MVVMCross Xamarin Adroid应用程序中使用ActionBar。我能够在片段中加载布局,问题是上下文总是指向MainView而不是布局视图。我试图更改上下文,但资源异常。错误是 Java.Lang.NullPointerException:尝试在 null 对象引用上调用虚拟方法 'android.content.res.Resources android.conte

  • 我们正在使用在Xamarin中构建一个应用程序。在应用程序中,我们需要播放视频,因此我们为此编写了一些代码。但是,视频没有播放,在Android上应用程序崩溃,同时抛出一个通用错误。 这是代码: 视频容器。反恐精英 VideoViewRender。反恐精英 所发生的情况是,被记录到控制台,但没有。我们从Xamarin论坛获得了这段代码,但未能成功实现。我们做错了什么?