![](/img/trans.png)
[英]Android Studio - Passing variable with intent add extra, ends up with null
[英]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中創建公共字段。 檢查活動生命周期。
但是,我會問你:
¿您是否需要故意傳遞位圖? ¿您無法在第二活動中獲得第一位置嗎?
如果您回答是。 也許您可以使用Handler
或AsyncTask
以異步方式加載它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.