簡體   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