使用Xamarin的Android应用程序崩溃管理
本文关键字:崩溃 管理 应用程序 Android Xamarin 使用 | 更新日期: 2023-09-27 18:13:19
一般场景:
在使用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,我获取用户的详细信息并在第三个活动中显示。
但有时,如果应用程序在第三个活动上崩溃,并且当我重新启动应用程序时,它不是从启动屏幕启动的,而是从它崩溃的活动(3rd activity(启动的,或者从调用该活动的前一个活动(3rd activity的调用者,不总是LoginForm的(启动的。
现在的问题是,由于我从未收到LoginPage,因此从未输入登录详细信息,因此(int(UserID设置为0/NULL,因此没有从数据库中提取任何数据。将第三个活动(配置文件活动(的所有字段显示为空白
我的处理解决方案:
因此,为了处理此问题,我覆盖OnResume((并检查UserID,即如果UserID为0,则加载登录屏幕。这非常好用。
但现在,当我通过杀死processID手动退出应用程序时,Profile屏幕仍然保留,它调用OnResume((;再一次当我注销后,再次加载登录屏幕,。。。。
这是循环的。现在我无法通过杀死processID
来退出应用程序,请帮助我找到这个问题的解决方案
很抱歉问了这么长的问题,但我没有找到比这更好的解释,希望我的朋友们不要介意。
(由OP在问题编辑中回答。转换为社区wiki答案。请参阅没有答案的问题,但在评论中解决了问题(或在聊天中扩展(
OP写道:
我设法解决了这个问题,并将用一个简单的例子进行解释。
class 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;
}
}
}
**actMyCustomActivity.cs:**
这是我的自定义活动,在这个活动中,我们将称之为
ApplicationCrashHandler()
。因此,每当这个活动崩溃或默认启动时,它都应该加载我的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
或是否有一些值,以及用户是否单击了"从菜单退出"。我们需要在不加载Required屏幕的情况下完全退出应用程序。这可能不是最佳解决方案或推荐的解决方案,但这对我有效…
如果有任何合法的方法来处理这个问题,请让我不,这样我就可以相应地修改我的代码。