Android App-使用公共​​成员变量将对象作为意图传递

时间:2015-04-21 08:14:01

标签: java android listview android-intent

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

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

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

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

我认为将myList设为public会更快,然后像这样传递位置:

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不会为空?

3 个答案:

答案 0 :(得分:1)

尝试在真实的手机上启动您的应用程序。我对模拟器有同样的问题,我认为这只是它的错,因为在真实的设备上我的代码运行得非常快,并且没有延迟。意图的额外内容不是应用程序变慢的负载。

答案 1 :(得分:0)

  

我认为将myList设为公开会更快

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

答案 2 :(得分:0)

在Activity中创建公共字段不可重复使用。检查活动生命周期。

但是,我会问你:

¿你需要在意图中传递位图吗?  ¿你能不能在第二次活动中获得它,第一个位置?

如果你的回答是肯定的。也许您可以使用HandlerAsyncTask

以异步方式加载它