序文
私たちは、通常のAndroidテントを解決することができる一般的な使用のコンポーネント間でデータを転送するが、データ転送が(例えばサイズ>リスト1000)大きいあなたが使用する必要がある場合意図は、使用することはできません、それが崩壊します:TransactionTooLargeException
。ビッグデータを配信することができない意図は、バインダーは、バインダーは、データを転送するためのトランザクションバッファのサイズを制限するため、内部通信メカニズムを使用します。バインダートランザクションバッファサイズは1MBに制限されているが、このサイズが共有され、そのデータの1メガバイトの下に渡されていませんが、現在の環境に応じて、絶対に安全です。テント転送プログラムのデータを考慮していない、など長い文字列、ビットマップ、のような大きなデータのため、データサイズを転送する意向の限界に挑戦しないでください。ここではいくつかの解決策があります。
シングルトン
次のコードは、これはより多くのだけ渡す場合、取得で取得で設定され、導入されていない、比較的簡単です。
public class MusicListHolder {
private ArrayList<MusicInfo> musicInfoList;
public ArrayList<MusicInfo> getMusicInfoList() {
return musicInfoList;
}
public void setMusicInfoList(ArrayList<MusicInfo> musicInfoList) {
this.musicInfoList = musicInfoList;
}
private static final MusicListHolder holder = new MusicListHolder();
public static MusicListHolder getInstance() {
return holder;
}
}
复制代码
注:別のプロセスは、単一のケースの単一のケースを取得するので、この方法は、マルチプロセスのために利用できないことであり、データを取得していない、同じではありません。
使用EventBus
EventBus Androidは様々な構成要素間で、メッセージ・バスパブリッシュ/サブスクライブ・最適化された側は、アプリケーション・コンポーネントとバックグラウンドスレッド間の通信を簡素化しています。「アリ・ババのAndroid開発マニュアル」にも推奨している:「アクティビティ間のデータ通信を、大量のデータのため、テント+ Parcelable方法の使用を避け、TransactionTooLargeExceptionを避けるためにEventBusや他の選択肢を検討してください。」。具体的な使用を参照してください。EventBusを
アプリケーションを使用します
アプリケーションに格納されたデータは、使用時の取り出し。このようなアプリケーションは、全体のデータを読み書きすることができます。非常に使いやすい、これはそれについて話をすることはありません。しかし、に注意を払うために使用されるいくつかの問題があります。
時にはので、メモリなどの不足のため、私たちのアプリケーションは、この時間は、再びアプリケーションにクリックしたときに、システムを殺すために強制されます、システムは、彼が死ぬ前に殺されたインタフェースに直接移動します。この時点で、アプリケーションが、それが新しく作成され、我々は決定していない場合、問題は空のオブジェクトになります、前のデータへのアクセスを取得することはできません。
ご使用の目安:
- 適切な判断を使用してくださいすることは空ではありません
- データが空の場合、アプリケーションを聞かせて、直接、元のアクティビティにロジックを考えます。
永続データ
データがファイルに保存されています。共通するのは、そうであっsqliteを、共有好み、ファイルとを意味します。
長所:
- アプリケーションは、すべての場所にアクセスすることができます
- あなたは簡単に失われることはありません
短所:
- 操作上の問題
- 非効率的な
- 読み取りエラーが発生しやすいです