Was soll ich tun, wenn ich große Datenmengen zwischen Aktivitäten übertragen muss?

Die zwischen Aktivitäten übertragenen Daten sind im Allgemeinen relativ einfach, aber manchmal werden in der tatsächlichen Entwicklung einige komplexere Daten übertragen, insbesondere wenn im Interview gefragt wird, was zu tun ist, wenn eine große Datenmenge zwischen Aktivitäten übertragen werden muss.

Die Größe der Intent-Übertragungsdaten ist begrenzt. Die Daten, die übertragen werden können, betragen etwa 1 MB bis 8 KB. Der Grund dafür ist, dass die Speichergröße der Binder-Sperrzuordnung 1 MB bis 8 KB beträgt. Im Allgemeinen wird für die Datenübertragung zwischen Aktivitäten Binder verwendet, sodass dies der Fall ist Beschränkung der Größe der Datenübertragung. Welche Methode sollte also verwendet werden, um große Datenmengen zwischen Aktivitäten zu übertragen? Tatsächlich gibt es viele Möglichkeiten. Lassen Sie uns einige Beispiele zur Erläuterung geben. Es handelt sich jedoch lediglich um die Verwendung von Datenpersistenz- oder Speicherfreigabelösungen. Im Allgemeinen ist die Speicherung großer Datenmengen nicht für die Verwendung von SP, MMKV und DataStore geeignet.

Es gibt mehrere Möglichkeiten, große Datenmengen zwischen Aktivitäten zu übertragen:
  • LruCache
  • Persistenz (SQLite, Datei usw.)
  • anonymer gemeinsamer Speicher
Verwenden Sie LruCache

LruCache ist eine Caching-Strategie, die uns bei der Verwaltung des Caches helfen kann. Schüler, die mehr darüber erfahren möchten, können zuerst das Glide-Kapitel lesen, um mehr darüber zu erfahren. Unter dem aktuellen Problem können wir LruCache verwenden, um unsere Daten als Übertragung zu speichern. Beispielsweise benötigen wir Aktivität A, um eine große Datenmenge an Aktivität B zu übertragen. Wir können Daten zuerst in Aktivität A in LruCache schreiben und sie dann lesen von LruCache.

Zuerst definieren wir die Schreib- und Leseregeln:

public interface IOHandler {
    //保存数据
    void put(String key, String value);
    void put(String key, int value);
    void put(String key, double value);
    void put(String key, float value);
    void put(String key, boolean value);
    void put(String key, Object value);
​
    //读取数据
    String getString(String key);
    double getDouble(String key);
    boolean getBoolean(String key);
    float getFloat(String key);
    int getInt(String key);
    Object getObject(String key);
}

Wir können bestimmte Implementierungsklassen gemäß den Regeln schreiben, also Schnittstellen. In der Implementierungsklasse speichern wir Daten und verwenden LruCache. Wir müssen hier eine Größe festlegen, da der maximale Datenwert im Speicher bestimmt wird und die Größe unserer gespeicherten Daten 1/8 des Maximalwerts nicht überschreiten sollte.

LruCache<String, Object> mCache = new LruCache<>( 10 * 1024*1024);

Das Schreiben der von uns verwendeten Daten ist relativ einfach:

@Override
public void put(String key, String value) {
    mCache.put(key, value);
}

Wenn beispielsweise oben Daten vom Typ „String“ geschrieben werden, müssen alle empfangenen Daten in mCache abgelegt werden.

Auch das Auslesen von Daten ist relativ einfach und bequem:

@Override
public String getString(String key) {
    return String.valueOf(mCache.get(key));
}
persistente Daten

Das ist die Art von SQLite, Datei usw. Schreiben Sie die Daten, die übertragen werden müssen, in eine temporäre Datei oder Datenbank und lesen Sie dann die Dateninformationen, wenn Sie zu einer anderen Komponente springen. Diese Verarbeitungsmethode führt aufgrund des zeitaufwändigen Lesens und Schreibens von Dateien zu einer geringen Effizienz des Programmbetriebs. Die Merkmale dieser Methode sind wie folgt:

Vorteil:

(1)应用中全部地方均可以访问

(2)即便应用被强杀也不是问题了

缺点:

(1)操做麻烦

(2)效率低下

匿名共享内存

在跨进程传递大数据的时候,我们一般会采用binder传递数据,但是Binder只能传递1M一下的数据,所以我们需要采用其他方式完成数据的传递,这个方式就是匿名共享内存。

Anonymous Shared Memory 匿名共享内存」是 Android 特有的内存共享机制,它可以将指定的物理内存分别映射到各个进程自己的虚拟地址空间中,从而便捷的实现进程间内存共享。

Android 上层提供了一些内存共享工具类,就是基于 Ashmem 来实现的,比如 MemoryFile、 SharedMemory。

今日分享到此结束,对你有帮助的话,点个赞再走呗,每日一个面试小技巧

关注公众号:Android老皮
解锁  《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路

Ich denke du magst

Origin juejin.im/post/7264503091116965940
Empfohlen
Rangfolge