Android 應用被kill問題排查和處理

一、背景

博主有一款應用市場應用,同樣的應用,在Android 10上開啟三個下載正常,在Android 14上開啟下載安裝,很頻繁被kill。首先想到的是,是不是應用內存太高,導致被kill,通過工具分析內存也不高,后面就想到是不是系統本身分配給應用的內存就不高,后來通過排查,確實是和系統的內存分配方案有關。

應用被kill?相關日志:

系統kill應用關鍵標識
ActivityManager: Killing
am_kill :

二、解決方法

1、通過排查,Android 14?dalvik.vm.heapgrowthlimit 這個屬性配置的是192m,Android 10配置的是512m,因此,從系統層將該屬性配置為正常的512m

2、在應用?AndroidManifest.xml 中聲明 android:largeHeap="true"

<application android:largeHeap="true"> ... </application>

三、相關概念介紹

dalvik.vm.heapgrowthlimit 是 Android 系統中 Dalvik 虛擬機(DVM)的一個關鍵參數,用于控制應用堆內存的動態增長上限。它的作用如下:

1. 核心作用
限制堆內存的增量擴展:
當應用的堆內存需求超過初始值(dalvik.vm.heapstartsize)時,虛擬機會逐步擴展堆大小,但擴展不會超過 heapgrowthlimit 設定的值。

例如:若 heapgrowthlimit=128m,即使應用需要更多內存,堆大小也不會超過 128MB(除非特殊配置)。

與 dalvik.vm.heapsize 的區別:

heapsize 是堆的絕對最大值(通過 android:largeHeap="true" 可突破 heapgrowthlimit 但不超過 heapsize)。

heapgrowthlimit 是普通應用的默認硬性上限。

2. 為什么需要這個參數?
防止單個應用過度占用內存:
避免因應用內存泄漏或設計缺陷導致系統資源耗盡(OOM),影響其他應用或系統穩定性。

平衡性能與資源:
較小的限制可減少內存壓力,但過低可能導致應用頻繁觸發 GC 或 OOM。

3. 默認值
因設備而異:
不同廠商/ROM 可能設置不同值,通常為 64MB、128MB 或 256MB,取決于設備物理內存大小。

查看方法:

bash
adb shell getprop dalvik.vm.heapgrowthlimit
4. 開發者注意事項
優化內存使用:
若應用接近 heapgrowthlimit,可能觸發 OutOfMemoryError。需通過工具(Android Profiler)分析內存泄漏或優化數據結構。

謹慎使用 largeHeap:
僅在確實需要時(如處理大圖像)在 AndroidManifest.xml 中聲明 android:largeHeap="true",但濫用可能導致系統性能下降。

注:以上只是博主處理的一種方式,還有其他優化方案,例如:控制下載次數等,如果應用確實大量消耗了內存,就要從應用角度減少內存消耗

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84633.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從代碼學習深度強化學習 - 多臂老虎機 PyTorch版

文章目錄 前言創建多臂老虎機環境多臂老虎機算法基本框架(基類)1. ε-貪心算法 (Epsilon-Greedy)2. 隨時間衰減的ε-貪婪算法 (Decaying ε-Greedy)3. 上置信界算法 (Upper Confidence Bound, UCB)4. 湯普森采樣算法 (Thompson Sampling)總結前言 歡迎來到“從代碼學習深度強化…

Android學習之Window窗口

Android Window機制學習筆記 在使用Window Flag實現界面全屏功能時&#xff0c;發現自身對Android Window機制缺乏系統認知&#xff0c;因此進行了專項學習與整理。 本文主要參考以下優質資料&#xff1a; Android的Window詳解Android官方Window文檔 Window基本概念 1. Win…

華為云 Flexus+DeepSeek 征文|搭建部署Dify-LLM推理引擎,賦能AI Agent智能體實現動態聯網搜索能力

華為云 Flexus 云服務器 X 實例專門為 AI 應用場景設計。它提供了強大的計算能力&#xff0c;能夠滿足 DeepSeek 模型以及后續搭建 AI Agent 智能體過程中對于數據處理和模型運行的高要求。在網絡方面&#xff0c;具備高速穩定的網絡帶寬&#xff0c;這對于需要頻繁聯網搜索信息…

Python 100個常用函數全面解析

Python 100個常用函數全面解析 1. 類型轉換函數 1.1 int() 將字符串或數字轉換為整數。 # 基本用法 int(123) # 123 int(3.14) # 3# 指定進制轉換 int(1010, 2) # 10 (二進制轉十進制) int(FF, 16) # 255 (十六進制轉十進制)# 臨界值處理 int() # ValueError: …

分享在日常開發中常用的ES6知識點【面試常考】

前言 在日常的業務開發中&#xff0c;可以熟悉運用掌握的知識點快速解決問題很重要。這篇分享JS相關的知識點&#xff0c;主要就是對數據的處理。 注意&#xff1a;本篇分享的知識點&#xff0c;只是起到一個拋磚引玉的作用&#xff0c;詳情的使用和更多的ES6知識點還請參考官…

CHI協議驗證中的異常及邊界驗證

CHI協議驗證中的異常及邊界驗證 針對 CHI 協議的錯誤注入工具、覆蓋率衡量方法及實際項目中的投入平衡 CHI 協議作為多核系統中復雜的緩存一致性協議,驗證其行為需要強大的工具和方法來執行錯誤注入和邊界條件測試,并衡量測試覆蓋率。以下詳細討論常用工具、覆蓋率評估方法及…

技術專欄|LLaMA家族——模型架構

LLaMA的模型架構與GPT相同&#xff0c;采用了Transformer中的因果解碼器結構&#xff0c;并在此基礎上進行了多項關鍵改進&#xff0c;以提升訓練穩定性和模型性能。LLaMA的核心架構如圖 3.14 所示&#xff0c;融合了后續提出的多種優化方法&#xff0c;這些方法也在其他模型&a…

電腦插入多塊移動硬盤后經常出現卡頓和藍屏

當電腦在插入多塊移動硬盤后頻繁出現卡頓和藍屏問題時&#xff0c;可能涉及硬件資源沖突、驅動兼容性、供電不足或系統設置等多方面原因。以下是逐步排查和解決方案&#xff1a; 1. 檢查電源供電問題 問題原因&#xff1a;多塊移動硬盤同時運行可能導致USB接口供電不足&#x…

Go 語言實現高性能 EventBus 事件總線系統(含網絡通信、微服務、并發異步實戰)

前言 在現代微服務與事件驅動架構&#xff08;EDA&#xff09;中&#xff0c;事件總線&#xff08;EventBus&#xff09; 是實現模塊解耦與系統異步處理的關鍵機制。 本文將以 Go 語言為基礎&#xff0c;從零構建一個高性能、可擴展的事件總線系統&#xff0c;深入講解&#…

npm ERR! @biomejs/biome@1.9.4 postinstall: `node scripts/postinstall.js`

npm install 報錯如下, npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! @biomejs/biome@1.9.4 postinstall: `node scripts/postinstall.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the @biomejs/biome@1.9.4 postinstall script. npm ERR! This is pro…

APMPlus × veFaaS 一鍵開啟函數服務性能監控,讓函數運行全程可觀測

資料來源&#xff1a;火山引擎-開發者社區 近年來&#xff0c;無服務器架構&#xff08;Serverless&#xff09;的崛起讓開發者得以從基礎設施的復雜性中解放&#xff0c;專注于業務邏輯創新。但隨著采用率提升&#xff0c;新的問題開始出現——函數實例的短暫生命周期、動態變…

瑪哈特零件矯平機:精密制造中的平整度守護者

在精密制造、模具、沖壓、鈑金加工、汽車零部件、航空航天以及電子設備等眾多工業領域&#xff0c;零件的平整度&#xff08;Flatness&#xff09;是一項至關重要的質量指標。微小的翹曲、扭曲或彎曲都可能導致裝配困難、功能失效、外觀缺陷甚至影響整機性能。為了消除零件在加…

std::make_shared簡化智能指針 `std::shared_ptr` 的創建過程,并提高性能(減少內存分配次數,提高緩存命中率)

std::make_shared 是 C 標準庫中的一個函數模板&#xff0c;用于簡化智能指針 std::shared_ptr 的創建過程。引入 std::make_shared 的主要原因是提高代碼的安全性、性能和可讀性。以下是詳細分析&#xff1a; 1. 安全性提升 避免顯式調用 new 導致的錯誤 在不使用 std::make…

JDK版本如何絲滑切換

一句話總結 》》》步驟分為&#xff1a; 下載對應JDK配置環境變量 下載JDK 如何下載JDK這里不必多提&#xff0c;提出一點&#xff0c;就是多個版本的JDK最好放在一個文件夾里&#xff08;忽略我的java文件夾&#xff0c;這里都是不同的jdk版本&#xff09;&#xff1a; 配置環…

Rust 通用代碼生成器:蓮花,紅蓮嘗鮮版三十六,啞數據模式圖片初始化功能介紹

Rust 通用代碼生成器&#xff1a;蓮花&#xff0c;紅蓮嘗鮮版三十六&#xff0c;啞數據模式圖片初始化功能介紹 Rust 通用代碼生成器蓮花&#xff0c;紅蓮嘗鮮版三十六。支持全線支持圖片預覽&#xff0c;可以直接輸出帶圖片的啞數據模式快速原型。啞數據模式和枚舉支持圖片。…

45. Jump Game II

目錄 題目描述 貪心 題目描述 45. Jump Game II 貪心 正向查找可到達的最大位置 時間復雜度O(n) class Solution { public:int jump(vector<int>& nums) {int n nums.size();if(n 1)return 0;int cur_cover 0;int cover 0;int res 0;for(int i 0;i < …

model.classifier 通常指模型的分類頭 是什么,詳細舉例說明在什么部位,發揮什么作用

model.classifier 通常指模型的分類頭 是什么,詳細舉例說明在什么部位,發揮什么作用 在深度學習模型中,分類頭(Classifier Head)是指模型末端用于完成分類任務的組件,通常是一個或多個全連接層(線性層)。它的作用是將模型提取的高層語義特征映射到具體的分類標簽空間。…

機器學習+城市規劃第十四期:利用半參數地理加權回歸來實現區域帶寬不同的規劃任務

機器學習城市規劃第十四期&#xff1a;利用半參數地理加權回歸來實現區域帶寬不同的規劃任務 引言 在城市規劃中&#xff0c;如何根據不同地區的地理特征來制定有效的規劃方案是一個關鍵問題。不同區域的需求和規律是不同的&#xff0c;因此我們必須考慮到地理空間的差異性。…

Kivy的ButtonBehavior學習

Kivy的ButtonBehavior學習 ButtonBehavior 簡介1、主要特點2、基本用法3、主要事件4、常用屬性5、方法代碼示例 文檔&#xff1a;https://kivy.org/doc/stable/api-kivy.uix.behaviors.button.html#kivy.uix.behaviors.button.ButtonBehavior ButtonBehavior 簡介 ButtonBeha…

WPS中將在線鏈接轉為圖片

WPS中將在線鏈接轉為圖片 文章目錄 WPS中將在線鏈接轉為圖片一&#xff1a;解決方案1、下載圖片&#xff0c;精確匹配&#xff08;會員功能&#xff09;2、將在線鏈接直接轉為圖片 一&#xff1a;解決方案 1、下載圖片&#xff0c;精確匹配&#xff08;會員功能&#xff09; …