Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android活动之间高效地传递自定义对象数据[Mono Android]_Android_Android Intent_Android Activity_Xamarin.android_Xamarin - Fatal编程技术网

在Android活动之间高效地传递自定义对象数据[Mono Android]

在Android活动之间高效地传递自定义对象数据[Mono Android],android,android-intent,android-activity,xamarin.android,xamarin,Android,Android Intent,Android Activity,Xamarin.android,Xamarin,这件事已经困扰了我一段时间了。 我正在开发一个android应用程序,它可以存储一个人的渔获量、最喜欢的钓鱼地点、钓具箱清单和其他数据。我的所有类都是可序列化的,并且可以在活动之间保存和加载,到目前为止,这些活动似乎都可以正常工作。但我预测,随着存储的数据越来越多,该应用程序将开始运行缓慢 我想问的是,是否有任何方法可以在整个应用程序中保留这些数据,这样我就不必在每次出现新屏幕时都加载这些数据。我已经发现以下信息有帮助,但需要更清楚一点才能理解: 另一个论坛说,你可以把它塞进应用程序对象中: [

这件事已经困扰了我一段时间了。 我正在开发一个android应用程序,它可以存储一个人的渔获量、最喜欢的钓鱼地点、钓具箱清单和其他数据。我的所有类都是可序列化的,并且可以在活动之间保存和加载,到目前为止,这些活动似乎都可以正常工作。但我预测,随着存储的数据越来越多,该应用程序将开始运行缓慢

我想问的是,是否有任何方法可以在整个应用程序中保留这些数据,这样我就不必在每次出现新屏幕时都加载这些数据。我已经发现以下信息有帮助,但需要更清楚一点才能理解:

另一个论坛说,你可以把它塞进应用程序对象中:

[Application]
public class MyApp : Android.App.Application {
    public MyApp(IntPtr handle)
        : base (handle)
    {
    }

    public FishingData Data {get; set;}
}
然后在您的活动中:

((MyApp) this.ApplicationContext).Data = value;
因此,我以前从未真正听说过使用这种方法,我不确定这种方法是否会贯穿整个应用程序过程(我觉得无论采用哪种方法,都必须通过序列化加载数据。以下是我希望应用程序执行的操作:

第一个活动是主菜单,当屏幕加载时,必须执行以下操作:

  • 如果找到设置文件,请使用序列化加载以前的FishingData对象(我知道如何执行此操作)
  • 如果没有,那么创建一个新的clean FishingData对象以在以后保存(我也知道这一点)

  • 既然我们有了FishingData对象,我如何确保我不必在每个活动中重复步骤1-2。我如何将FishingData对象传递到下一个活动,并确保它在应用程序仍在运行时处于全局状态。我只想加载一次(通过序列化)(您可以使用这种方法,只要您的
    应用程序
    对象处于活动状态,它就会一直存在(这意味着它将贯穿整个应用程序和活动)。您可以阅读有关使用存储在
    应用程序
    对象中的全局变量的更多信息。我认为mono不会造成任何影响,这将阻止您使用此方法。

    以下是我将如何通过parcelable在应用程序中传递数据。假设您有一个名为Fisherman的类(基本上针对用户)

    阅读

    Bundle b = getIntent().getExtras();
    Fisherman fisher = b.getParcelable("com.fisher.Fisherman");
    

    不幸的是,这只回答了您问题的第3步,但我建议您将这3步中的每一步分解为自己的问题,因为您试图做的事情比一个问题稍微长一些

    我不知道,但是+1是格式非常好的第一个问题。欢迎使用StackOverflow。要在活动之间传递信息,您需要然而,要使用Parcelable来保存所有这些数据,您最好至少创建一个sqllite数据库,或者更理想地使用您自己的数据库。谢谢,我使用上面链接中的步骤对其进行了测试,现在它成功地在整个活动中存储了一个全局变量。谢谢您的帮助,这对我来说是一个巨大的负担很高兴这有帮助:)请将问题标记为已解决:应用程序对象保证在您的所有活动之前创建,并一直保存到您的所有活动被销毁。但您不能将其用于全局状态,因为当您的应用程序位于后台时,Android可以销毁您的所有活动和应用程序对象。如果您收到电话c所有或切换应用程序,这可能仅仅意味着启动浏览器。操作系统可以选择性地销毁您的所有活动、销毁您的应用程序对象并终止您的托管进程。当您结束电话通话时,将启动一个新进程,将创建一个新的应用程序对象并创建一个新的活动。您将看到的唯一状态是t back将在传递到onCreate的包中。所有静态变量都将为null,并且应用程序对象将是一个全新的实例。
    Intent intent = new Intent(this, Activity.class);
    intent.putParcelableExtra("com.fisher.Fisherman", fisherman);
    
    Bundle b = getIntent().getExtras();
    Fisherman fisher = b.getParcelable("com.fisher.Fisherman");