繁体   English   中英

Android App-将对象作为额外的意图传递,而不是使用公共成员变量

[英]Android App- Passing object as intent extra vs using public member variable

我有一个以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不会为null吗?

尝试在真实的手机上启动您的应用程序。 我在模拟器上遇到了同样的问题,我认为这只是它的错误,因为在真实设备上,我的代码运行得非常快,并且没有滞后。 意图上的额外负担不会使应用程序变慢。

我认为公开myList会更快

它不仅是public而且是static 不要那样做 这可能会导致严重的内存泄漏。 像现在一样,继续在Intent提供对象。 如果您认为位图可能会导致一些滞后,请仅提供它的路径并让AsyncTask异步加载它

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

但是,我会问你:

¿您是否需要故意传递位图? ¿您无法在第二活动中获得第一位置吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM