【问题标题】:Android App- Passing object as intent extra vs using public member variableAndroid App-将对象作为意图额外传递与使用公共成员变量
【发布时间】:2015-04-21 08:14:01
【问题描述】:

我有一个以 ListView 作为主要活动的 android 应用程序。单击其中一个项目时,将启动一个新活动,显示详细视图。 ListView 有一个我定义的类的对象的 ArrayList。

目前我将这些对象传递给详细视图活动,如下所示:

Intent intent=new Intent(MainActivity.this,DetailActivity.class);
intent.putExtra(TAG,myList.get(position));
startActivity(intent);

其中 'myList' 是 MainActivity 的私有成员变量。但是,详细视图需要一些时间来加载,我想知道这是否是因为“myList”中的对象包含一个位图,这可能需要一些时间来阅读。延迟可能只是由于模拟器运行缓慢,我不确定。

我认为公开 myList 会更快,然后像这样传递位置:

Intent intent=new Intent(MainActivity.this,DetailActivity.class);
intent.putExtra(TAG,position);
startActivity(intent);

然后像这样访问 DetailActivity 中的对象:

MyObject object=MainActivity.myList.get(getIntent().getIntExtra(TAG));

但是,我相信我已经读过,当 DetailActivity 启动时,我的 MainActivity 可能会被破坏,然后 MainActivity.myList 不会为空吗?

【问题讨论】:

    标签: java android listview android-intent


    【解决方案1】:

    尝试在真正的手机上启动您的应用程序。我在模拟器上遇到了同样的问题,我认为这只是它的错,因为在真实设备上我的代码运行得非常快而且没有延迟。 Intent 上的额外内容不会导致应用程序变慢。

    【讨论】:

    • AVD 模拟器完全是垃圾。我搬到了 GenyMotion - 所有的东西都像在真实设备上一样工作。
    【解决方案2】:

    我认为将 myList 公开会更快

    不仅仅是public,还有static。不要那样做。它可能导致严重的内存泄漏。正如您已经在做的那样,继续在Intent 中提供对象。如果您认为位图可能会导致一些延迟,请仅提供它的路径并使用AsyncTask 来异步加载它

    【讨论】:

      【解决方案3】:

      不推荐在 Activity 中创建公共字段。检查活动生命周期。

      但是,我想问你:

      ¿您是否需要在意图中传递位图? ¿ 不能在第二个活动中获得它,以第一个的位置吗?

      如果你的回答是肯定的。也许您可以使用HandlerAsyncTask 以异步方式加载它。

      【讨论】:

        猜你喜欢
        • 2013-01-03
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 2012-04-29
        • 1970-01-01
        • 2012-08-06
        相关资源
        最近更新 更多