{"id":3998,"date":"2024-03-25T16:52:45","date_gmt":"2024-03-25T08:52:45","guid":{"rendered":"https:\/\/learn-house.idv.tw\/?p=3998"},"modified":"2024-04-01T17:25:07","modified_gmt":"2024-04-01T09:25:07","slug":"android%e7%a2%ba%e4%bf%9dapp%e6%88%96service%e4%b8%8d%e8%a2%abkilllowmemorykiller%e7%9a%84%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"https:\/\/learn-house.idv.tw\/?p=3998","title":{"rendered":"[Android]\u78ba\u4fddAPP\u6216Service\u4e0d\u88abKill (LowMemoryKiller) \u7684\u65b9\u6cd5"},"content":{"rendered":"<p>\u5728\u8b1b\u65b9\u6cd5\u524d\uff0c\u5148\u4f86\u8aaa\u8aaa\u4e00\u4e0b\u5b83\u7684\u539f\u7406\uff0c\u5982\u679c\u6c92\u8208\u8da3\u662f\u4e5f\u53ef\u4ee5\u76f4\u63a5\u62c9\u5230\u6700\u4e0b\u9762\u770b\u4f5c\u6cd5<\/p>\n<p>Android\u4e2d\u7684\u7a0b\u5e8f\u662f\u8a17\u7ba1\u7684\uff0c\u7576\u7cfb\u7d71\u8a18\u61b6\u9ad4\u8cc7\u6e90\u4e0d\u8db3\u6642\u6703\u767c\u51fa<em>java.lang.OutOfMemoryError<\/em>\u6642(\u5373OOM)\uff0c\u6b64\u6642\u6703\u4f9d\u7167\u512a\u5148\u9806\u5e8f\u81ea\u52d5\u9032\u884c\u7a0b\u5e8f\u7684\u56de\u6536\u3002 \u800c\u56de\u6536\u7684\u6a19\u6e96\u5247\u662f\u900f\u904eoom_adj\u3001oom_score\u3001oom_score_adj\u7684\u503c\u4f86\u6c7a\u5b9a<\/p>\n<ul>\n<li>oom_score\uff1a kernel\u6839\u64daoom_score_adj\u503c\uff0c\u7d50\u5408\u8a72\u8655\u7406\u7a0b\u5e8f\u4f7f\u7528\u7684\u8a18\u61b6\u9ad4\u91cf\u7b97\u51fa\u7684\u503c\uff0c\u5f8c\u9762\u7121\u8ad6\u662foom killer\u9084\u662flmkd\u90fd\u662f\u6839\u64da\u9019\u500b\u503c\u4f86\u6c7a\u5b9a\u6bba\u54ea\u4e9b\u8655\u7406\u7a0b\u5e8f\u7684\u3002<\/li>\n<li>oom_score_adj: \u53d6\u503c\u70ba-1000&#8212;1000,\u5982\u679c\u8ce6\u503c\u70ba-1000\u5c07\u95dc\u9589oom killer\u5c0d\u4ed6\u7684\u7ba1\u7406\uff08\u5982init\u3001surfaceflinger\u7b49native \u8655\u7406\u7a0b\u5e8f\uff09\u3002\u5b83\u548coom_adj\u90fd\u662fkernel\u7559\u7d66\u4f7f\u7528\u8005\u7a7a\u9593\u66f4\u6539\u8655\u7406\u7a0b\u5e8f\u88ab\u6bba\u512a\u5148\u9806\u5e8f\u7684\u4ecb\u9762<\/li>\n<\/ul>\n<p>Android\u5c07\u7a0b\u5e8f\u5206\u70ba\u4e0d\u540c\u7b49\u7d1a,\u5b83\u5011\u4f9d\u512a\u5148\u9806\u5e8f\u7531\u9ad8\u5230\u4f4e\u4f9d\u5e8f\u662f:<\/p>\n<p><!--more--><\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>ADJ\u7b49\u7d1a<\/td><td>\u512a\u5148\u6b0a<\/td><td>\u884c\u7a0b\u985e\u578b<\/td><\/tr><tr><td>NATIVE_ADJ<\/td><td>-1000<\/td><td>\u7531init\u8655\u7406\u7a0b\u5e8ffork\u51fa\u4f86\u7684native\u8655\u7406\u7a0b\u5e8f\uff0c\u4e26\u4e0d\u53d7system\u7ba1\u63a7<\/td><\/tr><tr><td>SYSTEM_ADJ<\/td><td>-900<\/td><td>\u50c5\u6307system_server\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>PERSISTENT_PROC_ADJ<\/td><td>-800<\/td><td>\u7cfb\u7d71persistent\u8655\u7406\u7a0b\u5e8f\uff0c\u5728AndroidManifest.xml\u4e2d\u7533\u660e<\/td><\/tr><tr><td>PERSISTENT_SERVICE_ADJ<\/td><td>-700<\/td><td>\u95dc\u806f\u8457system_server\u6216persistent\u7684\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>FOREGROUND_APP_ADJ<\/td><td>0<\/td><td>\u524d\u53f0\u8655\u7406\u7a0b\u5e8f\u3002\u6b63\u5728\u5c55\u793a\u662fAPP\uff0c\u5b58\u5728\u4e92\u52d5\u4ecb\u9762<\/td><\/tr><tr><td>VISIBLE_APP_ADJ<\/td><td>100<\/td><td>\u53ef\u898b\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>PERCEPTIBLE_APP_ADJ<\/td><td>200<\/td><td>\u53ef\u611f\u77e5\u8655\u7406\u7a0b\u5e8f\u3002\u6bd4\u5982\u5f8c\u53f0\u97f3\u6a02\u64ad\u653e\uff0c\u904estartForeground\u8a2d\u5b9a<\/td><\/tr><tr><td>BACKUP_APP_ADJ<\/td><td>300<\/td><td>\u5099\u4efd\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>HEAVY_WEIGHT_APP_ADJ<\/td><td>400<\/td><td>\u5f8c\u53f0\u7684\u91cd\u91cf\u7d1a\u7a0b\u5e8f\u3002system\/rootdir\/init.rc\u6a94\u6848\u4e2d\u8a2d\u5b9a<\/td><\/tr><tr><td>SERVICE_ADJ<\/td><td>500<\/td><td>\u670d\u52d9\u8655\u7406\u7a0b\u5e8f(Service process)<\/td><\/tr><tr><td>HOME_APP_ADJ<\/td><td>600<\/td><td>Home\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>PREVIOUS_APP_ADJ<\/td><td>700<\/td><td>\u4e0a\u4e00\u500b\u8655\u7406\u7a0b\u5e8f<\/td><\/tr><tr><td>SERVICE_B_ADJ<\/td><td>800<\/td><td>B List\u4e2d\u7684Service<\/td><\/tr><tr><td>CACHED_APP_MIN_ADJ<\/td><td>900<\/td><td>\u4e0d\u53ef\u898b\u8655\u7406\u7a0b\u5e8f\u7684adj\u6700\u5c0f\u503c<\/td><\/tr><tr><td>CACHED_APP_MAX_ADJ<\/td><td>906<\/td><td>\u4e0d\u53ef\u898b\u8655\u7406\u7a0b\u5e8f\u7684adj\u6700\u5927\u503c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>\u90a3\u8a72\u600e\u6a23\u624d\u80fd\u77e5\u9053\u76ee\u524d\u7684\u7a0b\u5e8f\u7684\u512a\u5148\u6b0a\u5462? \u6211\u4ee5Chromecast build-in\u9019\u500bprocess\u70ba\u4f8b\u5b50<\/p>\n<p>\u900f\u904eps -A\u7684\u6307\u4ee4\u5f97\u77e5com.google.android.apps.mediashell\u7684pid\u662f<span style=\"color: #ff0000;\">15223<\/span><\/p>\n<blockquote>\n<p>u0_a44 <span style=\"color: #ff0000;\">15223<\/span> 13234 1222180 59504 SyS_epoll_wait 0 S com.google.android.apps.mediashell<\/p>\n<\/blockquote>\n<p>\u518d\u900f\u904e\u4e0b\u5217\u6307\u4ee4<\/p>\n<table style=\"border: 1px solid #fcfcfc; padding: 1px; background-color: #000000;\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div style=\"padding: 1px; color: #ffffff; line-height: 1.5;\">console:\/ # cat \/proc\/15223\/oom_score_adj<br \/>100<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5c31\u80fd\u77e5\u9053\u9019\u500bprocess\u5c0d\u61c9\u7684\u662fVISIBLE_APP_ADJ(100)\uff0c\u9032\u800c\u80fd\u9810\u8a08\u7576\u555f\u52d5LowMemoryKiller\u6642\u662f\u5426\u5f88\u5bb9\u6613\u5c31\u6703\u88abkill\u6389\u3002<\/p>\n<p>\u56e0\u6b64\u8981\u600e\u6a23\u8abf\u6574\u4f60\u958b\u767c\u7684APP\u4ff1\u6709\u4e0d\u88ab\u96a8\u610fkill\u7684\u512a\u5148\u6b0a\u5462?<\/p>\n<p>\u8070\u660e\u7684\u4f60\u5728\u770b\u904e\u524d\u9762\u8868\u683c\u7684\u8aaa\u660e\uff0c\u61c9\u8a72\u4e5f\u6703\u6709\u767c\u73fe\u5230\u3002\u5982\u679c\u4f60\u662f\u6709system\u6b0a\u9650\u7684\u958b\u767c\u8005\uff0c\u610f\u5373\u4f60\u7684app\u662f\u653e\u5728 \/system\/app \u4e0b\u7684\u61c9\u7528\uff0c\u53ea\u9700\u8981\u5728\u5176AndroidManifest.xml\u6a94\u6848\u4e2d\u8a2d\u5b9apersistent\u5c6c\u6027\uff0c\u5373\u80fd\u53d6\u5f97PERSISTENT_PROC_ADJ(-800)\u3002<\/p>\n\n\n[java]<application android:name=\"MyApp\"\n             android:persistent=\"true\" <!-- add here -->\n             android:label=&#8221;@string\/dialerIconLabel&#8221;\n             android:icon=&#8221;@drawable\/ic_launcher_phone&#8221;>\n               &#8230;\n<\/application>[\/java]\n<\/code><\/pre>\n\n\n<p>ADJ\u512a\u5148\u9806\u5e8f\u5c0f\u65bc0\u7684\uff0c\u57fa\u672c\u4e0a\u5c31\u4e0d\u592a\u6703\u88abkill\u4e86\uff0c\u5373\u4f7f\u88ab\u6bba\u6b7b\u4e86\u4e5f\u6703\u88ab\u91cd\u555f\u7684\u8655\u7406\u7a0b\u5e8f\u3002<\/p>\n<p><\/p>\n<p>\u53c3\u8003\u8cc7\u6599\uff1a<br>https:\/\/www.jianshu.com\/p\/4ee14aa23f07<br>https:\/\/juejin.cn\/post\/6920207613531717645<br>https:\/\/bbs.huaweicloud.com\/blogs\/321964<\/p>","protected":false},"excerpt":{"rendered":"<p>\u5728\u8b1b\u65b9\u6cd5\u524d\uff0c\u5148\u4f86\u8aaa\u8aaa\u4e00\u4e0b\u5b83\u7684\u539f\u7406\uff0c\u5982\u679c\u6c92\u8208\u8da3\u662f\u4e5f\u53ef\u4ee5\u76f4\u63a5\u62c9\u5230\u6700\u4e0b\u9762\u770b\u4f5c\u6cd5 Android\u4e2d\u7684\u7a0b\u5e8f\u662f\u8a17\u7ba1\u7684\uff0c\u7576\u7cfb<span class=\"post-excerpt-end\">&hellip;<\/span><\/p>\n<p class=\"more-link\"><a href=\"https:\/\/learn-house.idv.tw\/?p=3998\" class=\"themebutton\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-3998","post","type-post","status-publish","format-standard","hentry","category-5"],"_links":{"self":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3998"}],"version-history":[{"count":5,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3998\/revisions"}],"predecessor-version":[{"id":4029,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/3998\/revisions\/4029"}],"wp:attachment":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}