Sobes.tech
Middle

Чӣ гуна дархост кардани тақсими зиёда аз ҳадди хотираи оперативӣ барои барнома?

sobes.tech AI

Ҷавоб аз AI

Android маҳдуд мекунад ҳаҷми хотираи оперативӣ, ки барои ҳар як барнома дастрас аст, то устувории тамоми системаро таъмин кунад. Ин маҳдудият номида мешавад heap size.

Одатан, иваз кардани он мустақиман талаб намешавад, зеро системаи идоракунии хотираро автоматӣ мекунад. Аммо дар ҳолатҳои кам, масалан, вақте ки бо тасвирҳои растрӣ ё маҷмӯи маълумотҳои калон кор мекунед, эҳтимол аст, ки зарур шавад, ки heap size-ро зиёд кунед.

Талаб кардани ҳаҷми бештар имконпазир аст, бо илова кардани хосият android:largeHeap="true" ба теги <application> дар файли AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="номи.пайкараи.шумо">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:largeHeap="true"> // Талаби барои ҳаҷми бештар

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Мухим:

  • Истифодаи android:largeHeap="true" бояд бо асос ва бо эҳтиёт бошад. Ин метавонад ба иҷрои система таъсири манфӣ расонад, агар чанд барнома ҳаҷми калонро талаб кунанд.
  • Ҳатто бо android:largeHeap="true", ҳадди болоии тақсимоти хотира мавҷуд аст, ки вобаста ба дастгоҳ ва версияи Android аст.
  • Беҳтар аст, ки истифодаи хотира дар барнома оптималӣ карда шавад, на танҳо ба зиёд кардани heap size такя кардан.

Гирифтани андозаи ҳосилшудаи heap метавонад ба таври барномавӣ анҷом дода шавад:

long heapSize = Runtime.getRuntime().maxMemory();
long freeSize = Runtime.getRuntime().freeMemory();
long allocatedSize = Runtime.getRuntime().totalMemory();

// Ба мегабайт табдил додан барои осонӣ
long heapSizeMB = heapSize / (1024 * 1024);
long freeSizeMB = freeSize / (1024 * 1024);
long allocatedSizeMB = allocatedSize / (1024 * 1024);

Маълумот дар бораи андозаи хотира кӯмак мекунад, ки фаҳмем, ки барнома чӣ қадар самаранок истифода мебарад ва оё воқеан зарур аст, ки ҳаҷми бештар талаб кунем.