【问题标题】:Exchange data between activities without using oncreate在不使用 oncreate 的情况下在活动之间交换数据
【发布时间】:2011-11-20 11:03:22
【问题描述】:

我已经实现了一个包含两个部分(活动)的 Android 应用程序

1- 主要活动接收 GP,计算地图上的 X、Y 像素
2- 从 SD 卡加载后显示/滚动地图。

Intent 和 extras(地图上的 X、Y 图)每 20 秒进行一次这两个活动之间的交换

一切正常。

问题是每次我发送意图时,我都会创建一个新地图,并且在多次交换后应用程序崩溃。

是否可以在不创建新地图的情况下将数据传输到一个活动?或修改第二个活动的 OnCreate 参数的其他解决方案

感谢帮助

【问题讨论】:

    标签: java android oncreate


    【解决方案1】:

    它崩溃正是因为每次切换活动时都会运行 onCreate。它每次都会启动一个新活动,因此每个活动都有多个实例,并且内存不足。

    要阻止这种情况发生,您应该在意图上设置一个标志,例如:

    int iflags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
    Intent i = new Intent("com.you.yourapp.yourotheractivity");
    i.setFlags(iflags);
    // Apply your extras
    startActivity(i);
    

    如果它在后台,这个标志将导致它重用其他活动,所以 onCreate() 只运行第一次,之后只有 onResume() 运行

    【讨论】:

    • 你好 nickT 我同意你对问题的分析。我相应地修改了程序。现在地图只出现一次。但是额外数据在第二个活动的 Oncreate 中管理,因此没有使用。你有什么建议?
    • 您始终可以使用静态成员、getter 和 setter 定义一个新类,并使用它来传输数据。然后,您可以通过在第一个活动中使用 setter 的 getter 在第二个活动的 onResume() 中访问它。
    【解决方案2】:

    android:launchMode 添加到AndroidManifest.xml 中的主要活动中。根据您的要求使用singleTasksingleInstance

    <activity android:name="com.app.activity" android:launchMode="singleTask" ...>
    


    来自http://developer.android.com/guide/topics/manifest/activity-element.html#lmode的引用:

    单任务

    系统在新任务的根目录创建活动并将意图路由到它。但是,如果 Activity 的实例已经存在,系统会通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建一个新实例。

    singleInstance

    与“singleTask”相同,只是系统不会在持有该实例的任务中启动任何其他活动。 Activity 始终是其任务中唯一且唯一的成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多