एंड्रॉइड में ActivityManager से हीप वॉच लिमिट सेट करना
यह ट्यूटोरियल दिखाता है कि ActivityManager.setWatchHeapLimit() का उपयोग करके ऐप की हीप उपयोग सीमा कैसे सेट करें - जब हीप इस सीमा को पार करता है तो सिस्टम नोटिफाई कर सकता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: लेआउट (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="16dp" />
</LinearLayout>
चरण 3: MainActivity कोड (java/MainActivity.java)
package com.example.myapplication;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
TextView textView;
@RequiresApi(api = Build.VERSION_CODES.N) // API 24+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// 4MB हीप वॉच लिमिट सेट करें
long limitBytes = 4 * 1024 * 1024; // 4MB
activityManager.setWatchHeapLimit(limitBytes);
String info = String.format(
"हीप वॉच लिमिट सेट: %s\n" +
"लिमिट बाइट्स: %,d\n" +
"नोट: यह केवल डिबगिंग/प्रोफाइलिंग के लिए है",
formatBytes(limitBytes), limitBytes
);
textView.setText(info);
}
private String formatBytes(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String unit = "KMGTPE".charAt(exp-1) + "B";
return String.format("%.2f %s", bytes / Math.pow(1024, exp), unit);
}
}
कब उपयोग करें
- मेमोरी लीक डिबगिंग के दौरान
- हीप उपयोग पैटर्न समझने के लिए
- OOM (OutOfMemoryError) से पहले चेतावनी
- प्रोफाइलिंग सत्र में
महत्वपूर्ण सीमाएं
- केवल डिबगिंग के लिए - प्रोडक्शन कोड में उपयोग न करें
- सिस्टम-वाइड सेटिंग - सभी प्रोसेस प्रभावित हो सकते हैं
- एंड्रॉइड 7.0 (API 24)+ आवश्यक
- आधुनिक विकल्प: Android Studio Profiler, LeakCanary, Perfetto
संबंधित API
// लिमिट क्लियर करें (पिछला आर्टिकल) activityManager.clearWatchHeapLimit(); // वर्तमान हीप उपयोग Debug.MemoryInfo info = new Debug.MemoryInfo(); Debug.getMemoryInfo(info); // मेमोरी क्लास (अधिकतम हीप प्रति ऐप) int memClass = activityManager.getMemoryClass(); // MB में // लार्ज हीप (manifest में android:largeHeap="true") int largeMemClass = activityManager.getLargeMemoryClass();
बेहतर विकल्प: लाइफसाइकिल-अवेयर मॉनिटरिंग
// Jetpack Lifecycle के साथ
lifecycle.addObserver(new DefaultLifecycleObserver() {
@Override
public void onStart(@NonNull LifecycleOwner owner) {
if (BuildConfig.DEBUG) {
startHeapMonitoring();
}
}
@Override
public void onStop(@NonNull LifecycleOwner owner) {
stopHeapMonitoring();
}
});
ऐप टेस्ट करें
चलाएं - "हीप वॉच लिमिट सेट: 4.00 MB" दिखेगा। कोई विजुअल परिवर्तन नहीं, यह डिबगिंग API है।