簡體   English   中英

Android Realm文件大小

[英]Android Realm large file size

我是android編程的新手。 我為我的簡單成績跟蹤器實現了Realm,然而,文件大小從1.5mb增加到5mb。 這是正常的嗎?

我只是在每個使用oncreate的類中添加一個領域實例,只要活動有可能結束,就會在realm.close()中添加。 還圍繞每個對象創建包裝了begin和commit事務。

有沒有我做錯的東西,結果是巨大的文件大小?

謝謝!

編輯:我的意思是apk大小

@geisshirt是對的。 Realm引入了方法public static boolean compactRealm(RealmConfiguration configuration)來壓縮領域數據庫。 調用此方法可將數據庫的大小從+ 350MB減少到<1MB

此處提供的文檔: https//realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-

如果您有長時間運行的事務,則文件大小可能會增加。 有關說明以及如何減小文件大小,請參閱https://realm.io/docs/java/latest/#faq (“大域文件大小”)。

我研究過並試過一切,所以不要浪費你的時間。 有兩種可能的解決方案:

1)Realm.compact(RealmConfiguration):您需要關閉所有已打開的Realm數據庫的連接,從活動或創建它的位置。 然后你應該調用Realm.compact(yourDb.getConfiguration())。 如果在此緊湊操作之前關閉每個連接,結果將為true,並且數據庫將更小,否則它將不會調整大小,結果將為false。

2)我的那種compactDb:第二種解決方案是基於做某種“交換機制”,可能會有較慢的性能(在一些大文件,以毫秒計),但肯定會解決大文件的問題,只留下必要的領域到您的數據庫的大小。

我創建了我的個人函數“compactDb()”,它將:1。取我的db(領域),2。將其復制到一個名為default-compact.realm的新文件中3.刪除我的db(領域)4。復制文件default-compact.realm to my db(new file with extension realm)5。刪除default-compact.realm,因為我們不再需要它們了

這個“復制東西”將刪除舊版本的數據庫並僅復制最后一個(數據庫的實際大小)。 由於下一步是刪除你當前的數據庫,那么你將擺脫那些文件... :)

這是我的代碼:

    public void compactDb(String dbName){
    try{
        //move compacted db to new one...
        Realm db = Realm.getInstance(getConfig(dbName));
        File compactedFile = new File(db.getConfiguration().getRealmDirectory(), "default-compacted.realm");
        compactedFile.delete();
        db.writeCopyTo(compactedFile);
        db.close();

        Realm compactedDb = Realm.getInstance(getConfig("default-compacted.realm"));
        File dbFile = new File(compactedDb.getConfiguration().getRealmDirectory(), dbName);
        dbFile.delete();
        compactedDb.writeCopyTo(dbFile);
        compactedDb.close();
        compactedFile.delete();

    }catch (Exception e){
        e.printStackTrace();
    }
}

幫助函數,它將為我提供我通過代碼使用的所需配置:

private RealmConfiguration getConfig(String name) {
    return new RealmConfiguration.Builder()
            .name(name)
            .schemaVersion(0)
            .build();
}

該功能的用法是:

compactDb("default.realm");

並將您的Realm數據庫調整為實際大小...有一個快樂的編碼:)

如前面的答案中所述,有時需要使用default.realm文件,因為如果你做了很多領域操作它會增加。 我發現這個文件有1.7GB之后,用不同的線程處理很多寄存器。

如下所示,在將領域配置為緊湊之后,此文件已減少到<1MB。

Realm API中的更多細節- CompactRealm

但是,一種簡單的方法是在構建域配置時調用方法compactOnLaunch

    Realm.init(this);

    objRealmConfig = new RealmConfiguration.Builder()
            .schemaVersion(2)
            // WARNING: Use compact to reduce the size of default.realm. A Realm file usually contain free/unused space.
            // This method removes this free space and the file size is thereby reduced
            // If the app do a lot of operations with Realm, use this method to compact and release free/unused space.
            // More details in: https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
            .compactOnLaunch()
            .build();

    Realm.setDefaultConfiguration(objRealmConfig);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM