{"id":153,"date":"2024-08-27T14:47:06","date_gmt":"2024-08-27T06:47:06","guid":{"rendered":"https:\/\/newstrong.xyz\/2024\/08\/android%e4%bd%bf%e7%94%a8kotlin%e5%b0%81%e8%a3%85mmkvutils\/"},"modified":"2024-08-27T14:47:06","modified_gmt":"2024-08-27T06:47:06","slug":"android%e4%bd%bf%e7%94%a8kotlin%e5%b0%81%e8%a3%85mmkvutils","status":"publish","type":"post","link":"https:\/\/newstrong.top\/index.php\/2024\/08\/27\/android%e4%bd%bf%e7%94%a8kotlin%e5%b0%81%e8%a3%85mmkvutils\/","title":{"rendered":"Android\u4f7f\u7528Kotlin\u5c01\u88c5MMKVUtils"},"content":{"rendered":"<p><meta itemprop=\"headline\" content=\"Android\u4f7f\u7528Kotlin\u5c01\u88c5MMKVUtils\"> <meta itemprop=\"keywords\" content=\"Android\"> <meta itemprop=\"datePublished\" content=\"2023-09-07T15:57:00.000Z\"> <meta itemprop=\"image\" content=\"https:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/gold-assets\/icon\/icon-128.png~tplv-t2oaga2asx-image.image\"> <\/p>\n<div itemprop=\"author\" itemscope=\"itemscope\" itemtype=\"http:\/\/schema.org\/Person\">\n<meta itemprop=\"name\" content=\"\u5927\u9f84\u5c0f\u6e23\u6e23\"> <meta itemprop=\"url\" content=\"https:\/\/juejin.cn\/user\/2119514151720222\">\n<\/div>\n<div itemprop=\"publisher\" itemscope=\"itemscope\" itemtype=\"http:\/\/schema.org\/Organization\">\n<meta itemprop=\"name\" content=\"\u6398\u91d1\"> <\/p>\n<div itemprop=\"logo\" itemscope=\"itemscope\" itemtype=\"https:\/\/schema.org\/ImageObject\">\n<meta itemprop=\"url\" content=\"https:\/\/p1-jj.byteimg.com\/tos-cn-i-t2oaga2asx\/gold-assets\/icon\/icon-white-180.png~tplv-t2oaga2asx-image.image\"> <meta itemprop=\"width\" content=\"180\"> <meta itemprop=\"height\" content=\"180\">\n<\/div>\n<\/div>\n<p class=\"article-title\" data-v-0140422c>\nAndroid\u4f7f\u7528Kotlin\u5c01\u88c5MMKVUtils\n<\/p>\n<div class=\"author-info-block block-hidden\" data-v-0140422c>\n<div class=\"author-info-box\" data-v-0140422c>\n<div class=\"author-name\" data-v-0140422c><span class=\"name\" style=\"max-width:160px;\" data-v-65b50b51 data-v-1800aadb><br \/>\n    \u5927\u9f84\u5c0f\u6e23\u6e23<br \/>\n  <\/span>    <\/div>\n<div class=\"meta-box\" data-v-0140422c>\n<time datetime=\"2023-09-07T15:57:00.000Z\" title=\"Thu Sep 07 2023 15:57:00 GMT+0000 (Coordinated Universal Time)\" class=\"time\" data-v-0140422c><br \/>\n                    2023-09-07<br \/>\n                  <\/time> <svg width=\"16\" height=\"16\" viewbox=\"0 0 16 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"read-icon\" data-v-0140422c><path d=\"M7.90078 2.80078C4.49278 2.80078 1.74745 6.11672 0.800781 7.77469C1.74745 9.58339 4.49278 13.2008 7.90078 13.2008C11.3088 13.2008 14.0541 9.58339 15.0008 7.77469C14.0541 6.11672 11.3088 2.80078 7.90078 2.80078Z\" stroke=\"currentColor\" data-v-0140422c><\/path><circle cx=\"7.89922\" cy=\"8.00078\" r=\"2.2\" stroke=\"currentColor\" data-v-0140422c><\/circle><\/svg> <span class=\"views-count\" data-v-0140422c><br \/>\n                    3,584<br \/>\n                  <\/span> <span class=\"read-time\" data-v-0140422c><svg width=\"16\" height=\"16\" viewbox=\"0 0 16 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" data-v-0140422c><rect width=\"16\" height=\"16\" fill=\"none\" data-v-0140422c><\/rect><circle cx=\"8\" cy=\"8\" r=\"5.65625\" stroke=\"#8A919F\" data-v-0140422c><\/circle><path d=\"M7.69141 5.18652V8.30924H10.8141\" stroke=\"#8A919F\" stroke-linecap=\"round\" stroke-linejoin=\"round\" data-v-0140422c><\/path><\/svg><br \/>\n                    \u9605\u8bfb10\u5206\u949f<br \/>\n                  <\/span>\n<\/div>\n<\/div>\n<div style=\"flex:1;\" data-v-0140422c><\/div>\n<\/div>\n<div id=\"article-root\" itemprop=\"articleBody\" class=\"main\" data-v-0140422c>\n<div class=\"article-viewer markdown-body cache result\">\n<style>@charset \"UTF-8\";.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:14px;overflow-x:hidden;color:var(--cyanosis-base-color);transition:color .35s;--cyanosis-base-color:#353535;--cyanosis-title-color:#005bb7;--cyanosis-strong-color:#2196f3;--cyanosis-em-color:#4fc3f7;--cyanosis-del-color:#ccc;--cyanosis-link-color:#3da8f5;--cyanosis-linkh-color:#007fff;--cyanosis-border-color:#bedcff;--cyanosis-border-color-2:#ececec;--cyanosis-bg-color:#fff;--cyanosis-blockquote-color:#8c8c8c;--cyanosis-blockquote-bg-color:#f0fdff;--cyanosis-code-color:#c2185b;--cyanosis-code-bg-color:#fff4f4;--cyanosis-code-pre-color:#f8f8f8;--cyanosis-table-border-color:#c3e0fd;--cyanosis-table-th-color:#dff0ff;--cyanosis-table-tht-color:#005bb7;--cyanosis-table-tr-nc-color:#f7fbff;--cyanosis-table-trh-color:#e0edf7;--cyanosis-slct-title-color:#005bb7;--cyanosis-slct-titlebg-color:rgba(175,207,247,0.25);--cyanosis-slct-text-color:#c80000;--cyanosis-slct-bg-color:rgba(175,207,247,0.25);--cyanosis-slct-del-color:#999;--cyanosis-slct-elbg-color:#e8ebec;--cyanosis-slct-codebg-color:#ffeaeb;--cyanosis-slct-prebg-color:rgba(160,200,255,0.25)}.markdown-body.__dark{--cyanosis-base-color:#cacaca;--cyanosis-title-color:#ddd;--cyanosis-strong-color:#fe9900;--cyanosis-em-color:#ffd28e;--cyanosis-del-color:#ccc;--cyanosis-link-color:#ffb648;--cyanosis-linkh-color:#fe9900;--cyanosis-border-color:#ffe3ba;--cyanosis-border-color-2:#ffcb7b;--cyanosis-bg-color:#2f2f2f;--cyanosis-blockquote-color:#c7c7c7;--cyanosis-blockquote-bg-color:rgba(255,199,116,0.1);--cyanosis-code-color:#000;--cyanosis-code-bg-color:#ffcb7b;--cyanosis-code-pre-color:rgba(255,227,185,0.5);--cyanosis-table-border-color:#fe9900;--cyanosis-table-th-color:#ffb648;--cyanosis-table-tht-color:#000;--cyanosis-table-tr-nc-color:#6d5736;--cyanosis-table-trh-color:#947443;--cyanosis-slct-title-color:#000;--cyanosis-slct-titlebg-color:#fe9900;--cyanosis-slct-text-color:#00c888;--cyanosis-slct-bg-color:rgba(175,207,247,0.25);--cyanosis-slct-del-color:#999;--cyanosis-slct-elbg-color:#000;--cyanosis-slct-codebg-color:#ffcb7b;--cyanosis-slct-prebg-color:rgba(160,200,255,0.25)}.markdown-body h1{padding-bottom:4px;font-size:30px}.markdown-body h1,.markdown-body h2{margin-top:36px;margin-bottom:10px;line-height:1.5;color:var(--cyanosis-title-color);transition:color .35s}.markdown-body h2{position:relative;padding-left:10px;padding-right:10px;padding-bottom:10px;font-size:24px;border-bottom:1px solid var(--cyanosis-border-color-2)}.markdown-body h2:before{content:\"\u300c\";position:absolute;top:-6px;left:-14px}.markdown-body h2:after{content:\"\u300d\";position:relative;top:6px;right:auto}.markdown-body h3{position:relative;padding-bottom:0;margin-top:30px;margin-bottom:10px;font-size:20px;line-height:1.5;color:var(--cyanosis-title-color);padding-left:6px;transition:color .35s}.markdown-body h3:before{content:\"\u00bb\";padding-right:6px;color:var(--cyanosis-strong-color)}.markdown-body h4{margin-top:24px;font-size:16px}.markdown-body h4,.markdown-body h5{padding-bottom:0;margin-bottom:10px;line-height:1.5;color:var(--cyanosis-title-color);padding-left:6px;transition:color .35s}.markdown-body h5{margin-top:18px;font-size:14px}.markdown-body h6{padding-bottom:0;margin-top:12px;margin-bottom:10px;font-size:12px;line-height:1.5;color:var(--cyanosis-title-color);padding-left:6px;transition:color .35s}.markdown-body p{line-height:inherit;margin-top:16px;margin-bottom:16px}.markdown-body img{max-width:100%}.markdown-body hr{position:relative;width:98%;height:1px;margin-top:32px;margin-bottom:32px;background-image:linear-gradient(90deg,var(--cyanosis-link-color),rgba(255,0,0,.3),hsla(0,0%,100%,.1),rgba(255,0,0,.3),var(--cyanosis-link-color));border-width:0;overflow:visible}.markdown-body hr:after{content:\"\";position:absolute;margin:auto;left:0;right:0;bottom:0;top:0;display:inline-block;width:60px;height:20px;background-color:var(--cyanosis-bg-color);background-image:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAABgrToAAAADoklEQVRYR82XTYgcRRTHf2933Q1RjAa9eFO8JHoJ8RQVBQ2iBwXBET0YEUTXNVmNQtTpmeqaWV0XNRq\/o4KoECSCEPSg4CF+BYUkIIiCoCJCPIhC\/Ihh2Z0nVV27VnZnenumW9i6ddV7\/\/frV69fVQurfMgq56NawFTPAU6QyomqXrw6wIZeyhCPebA5buNR+akKyGoAjd6BshthnYdSjqNcRVuOlIUsD2j0SuA94IwuMHdh5ZUykOUBXfSGbmKI54EtAeYIHSZoy5dl4JxvNYBOKdW1KE8BQ8AkVk6WhasWsAiN0TX9gveXQaPP+Aytpc4u+bMI06JNohsYYYYOR2lJWtS3OKDRfcAtQfgDoI6Vo4UCGb0OmAEuDvZvYmVbEd\/igC3dzDz7gQu8sPA9kJDK27mBmjqBeLjTg90PDFOjWawFFQd06kZHEfaj3LAIpTRpSXsZ5E06zEYP9sDimnAApYaV2SLZG\/wjMeqAkijwW4xQJ5Gf\/ZzRC8OW3hiBTGGlURRswW55Bh\/Ssxljrwew8l1PQaM14GngvGDzBUKdDsMeTtgU5o8B92PFlUf3YXUrHa7Fys6lBqcCGnX15YQ2A18FyPd7Crd1A3M8C1wdbH4DD3hWeP6IEXbQkG97ajR1HPFnuPP5jFFq1OWX7hl8WM9l1AO648uNfwLk7tytMeogty+xeQ4rO3r6bdcx1nuwOGsHmaXGtPzae4uzGnLH1kQkvpdZGrHjssBZJrL+pqS05KWc8tgITAPXRzYvYOXe\/C2OV43eDcRBDtIhoS2f9wzc0Cv8Wls+zoFzUC5zF0U241h5uZtPfptp6OUM8wbK+cH5GEpCS17P3fJei0Z3+npTxryJ8CPzbKMtn\/ZyWbkPGl0PuFPkmkjkcb4h4R2ZLwRq1H0ALmvjkf2HwK1Y+T1PY2XABe\/sHJ6MxN5lnoSpnC\/UGbsTaI5phK2R7x6s3Ffk5YoDOrWm3onwJHBmEP86bPmBrsGaenNoIdnxCH+gPEhLXi0Cl1VBvyPVLSh7gEuC62yAfOIUqabWEaaiucMIk6RyqJ+Q\/QM69V26jjW86Gvov\/EaoyT8zRCn+Xq7PVrbx0nuYUaO9wM3WAbjCE1NEUw09Um4UV+2OKfYfu5\/S19gsAzGKqm6LE5FrShbdS0ku465DjDwKA\/oQht19ejqbaEVuRbiLhuHByYLjtUAZpDutzP7cYdHsPJXWbjyNVgFwQoa1WXwf4Jd9YD\/Ap80+yE7+u9aAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-size:auto 100%;background-position-x:center;transition:background-color .5s}.markdown-body code{padding:.065em .4em;font-size:.87em;color:var(--cyanosis-code-color);word-break:break-word;overflow-x:auto;background-color:var(--cyanosis-code-bg-color);border-radius:2px}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{display:block;padding:16px 12px;margin:0;font-size:12px;color:#333;word-break:normal;overflow-x:auto;background:var(--cyanosis-code-pre-color)}.markdown-body pre>code::-webkit-scrollbar{width:4px;height:4px}.markdown-body pre>code::-webkit-scrollbar-track{background-color:var(--cyanosis-border-color)}.markdown-body pre>code::-webkit-scrollbar-thumb{background-color:var(--cyanosis-strong-color);border-radius:10px}.markdown-body a{position:relative;text-decoration:none;color:var(--cyanosis-link-color);border-bottom:1px solid var(--cyanosis-border-color)}.markdown-body a:hover{border-bottom-color:var(--cyanosis-linkh-color)}.markdown-body a:active,.markdown-body a:hover{color:var(--cyanosis-linkh-color)}.markdown-body a:after{position:absolute;content:\"\";top:100%;left:0;width:100%;opacity:0;border-bottom:1px solid var(--cyanosis-border-color);transition:top .3s,opacity .3s;transform:translateZ(0)}.markdown-body a:hover:after{top:0;opacity:1;border-bottom-color:var(--cyanosis-linkh-color)}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid var(--cyanosis-table-border-color);border-spacing:0;border-collapse:collapse}.markdown-body table thead{color:#000;text-align:left;font-size:14px;background:#f6f6f6}.markdown-body table tr:nth-child(2n){background-color:var(--cyanosis-table-tr-nc-color)}.markdown-body table tr:hover{background-color:var(--cyanosis-table-trh-color)}.markdown-body table td,.markdown-body table th{padding:12px 8px;line-height:24px;border:1px solid var(--cyanosis-table-border-color)}.markdown-body table th{color:var(--cyanosis-table-tht-color);background-color:var(--cyanosis-table-th-color)}.markdown-body table td{min-width:120px}.markdown-body blockquote{color:var(--cyanosis-blockquote-color);border-left:4px solid var(--cyanosis-strong-color);background-color:var(--cyanosis-blockquote-bg-color);padding:1px 20px;margin:22px 0;transition:color .35s}.markdown-body blockquote:after{display:block;content:\"\"}.markdown-body blockquote>p{margin:10px 0}.markdown-body b,.markdown-body blockquote>b,.markdown-body blockquote>strong,.markdown-body strong{color:var(--cyanosis-strong-color)}.markdown-body em,.markdown-body i{color:var(--cyanosis-em-color)}.markdown-body del{color:var(--cyanosis-del-color)}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:4px}.markdown-body ol li{padding-left:6px}.markdown-body details>summary{outline:none;color:var(--cyanosis-title-color);font-size:20px;font-weight:bolder;border-bottom:1px solid var(--cyanosis-border-color);cursor:pointer}.markdown-body details>p{padding:10px 20px;margin:10px 0 0;color:#666;background-color:var(--cyanosis-blockquote-bg-color);border:2px dashed var(--cyanosis-strong-color)}.markdown-body h1::selection,.markdown-body h2::selection,.markdown-body h3::selection,.markdown-body h4::selection,.markdown-body h5::selection,.markdown-body h6::selection{color:var(--cyanosis-slct-title-color);background-color:var(--cyanosis-slct-titlebg-color)}.markdown-body ol li::selection,.markdown-body p::selection,.markdown-body ul li::selection{color:var(--cyanosis-slct-text-color);background-color:var(--cyanosis-slct-bg-color)}.markdown-body a::selection,.markdown-body b::selection,.markdown-body em::selection,.markdown-body i::selection,.markdown-body strong::selection{background-color:var(--cyanosis-slct-elbg-color)}.markdown-body del::selection{color:var(--cyanosis-slct-del-color);background-color:var(--cyanosis-slct-elbg-color)}.markdown-body table thead th::selection{background-color:transparent}.markdown-body table tbody td::selection{background-color:var(--cyanosis-slct-bg-color)}.markdown-body code::selection{background-color:var(--cyanosis-slct-codebg-color)}.markdown-body pre>code::selection{background-color:var(--cyanosis-slct-prebg-color)}.markdown-body .contains-task-list{padding-left:14px;list-style:none}.markdown-body .contains-task-list input[type=checkbox]{position:relative}.markdown-body .contains-task-list input[type=checkbox]:before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;width:inherit;height:inherit;background:#f0f8ff;border:1px solid #add6ff;border-radius:2px;box-sizing:border-box;z-index:1}.markdown-body .contains-task-list input[type=checkbox]:checked:after{content:\"\u2713\";position:absolute;top:-12px;left:0;right:0;bottom:0;width:0;height:0;color:#f55;font-size:20px;font-weight:700;z-index:2}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}<\/style>\n<style data-highlight data-highlight-key=\"atom-one-dark\">.markdown-body pre,.markdown-body pre>code.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}<\/style>\n<h1 data-id=\"heading-0\">Android\u4f7f\u7528Kotlin\u5c01\u88c5MMKVUtils<\/h1>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd768467815.\" alt=\"Android\u4f7f\u7528kotlin\u5c01\u88c5MMKV.png\" loading=\"lazy\"><\/p>\n<h1 data-id=\"heading-1\">1.\u7b80\u4ecb\uff1a<\/h1>\n<p>MMKV \u662f\u57fa\u4e8e mmap \u5185\u5b58\u6620\u5c04\u7684 key-value \u7ec4\u4ef6\uff0c\u5e95\u5c42\u5e8f\u5217\u5316\/\u53cd\u5e8f\u5217\u5316\u4f7f\u7528 protobuf \u5b9e\u73b0\uff0c\u6027\u80fd\u9ad8\uff0c\u7a33\u5b9a\u6027\u5f3a\u3002\u4ece 2015 \u5e74\u4e2d\u81f3\u4eca\u5728\u5fae\u4fe1\u4e0a\u4f7f\u7528\uff0c\u5176\u6027\u80fd\u548c\u7a33\u5b9a\u6027\u7ecf\u8fc7\u4e86\u65f6\u95f4\u7684\u9a8c\u8bc1\u3002\u8fd1\u671f\u4e5f\u5df2\u79fb\u690d\u5230 Android \/ macOS \/ Win32 \/ POSIX \u5e73\u53f0\uff0c\u4e00\u5e76\u5f00\u6e90\u3002<\/p>\n<h1 data-id=\"heading-2\">2.MMKV \u6e90\u8d77<\/h1>\n<p>\u5728\u5fae\u4fe1\u5ba2\u6237\u7aef\u7684\u65e5\u5e38\u8fd0\u8425\u4e2d\uff0c\u65f6\u4e0d\u65f6\u5c31\u4f1a\u7206\u53d1\u7279\u6b8a\u6587\u5b57\u5f15\u8d77\u7cfb\u7edf\u7684 crash\uff0c<br \/>\n\u53c2\u8003\u6587\u7ae0\uff0c\u6587\u7ae0\u91cc\u9762\u8bbe\u8ba1\u7684\u6280\u672f\u65b9\u6848\u662f\u5728\u5173\u952e\u4ee3\u7801\u524d\u540e\u8fdb\u884c\u8ba1\u6570\u5668\u7684\u52a0\u51cf\uff0c\u901a\u8fc7\u68c0\u67e5\u8ba1\u6570\u5668\u7684\u5f02\u5e38\uff0c\u6765\u53d1\u73b0\u5f15\u8d77\u95ea\u9000\u7684\u5f02\u5e38\u6587\u5b57\u3002\u5728\u4f1a\u8bdd\u5217\u8868\u3001\u4f1a\u8bdd\u754c\u9762\u7b49\u6709\u5927\u91cf cell \u7684\u5730\u65b9\uff0c\u5e0c\u671b\u65b0\u52a0\u7684\u8ba1\u65f6\u5668\u4e0d\u4f1a\u5f71\u54cd\u6ed1\u52a8\u6027\u80fd\uff1b\u53e6\u5916\u8fd9\u4e9b\u8ba1\u6570\u5668\u8fd8\u8981\u6c38\u4e45\u5b58\u50a8\u4e0b\u6765\u2014\u2014\u56e0\u4e3a\u95ea\u9000\u968f\u65f6\u53ef\u80fd\u53d1\u751f\u3002\u8fd9\u5c31\u9700\u8981\u4e00\u4e2a\u6027\u80fd\u975e\u5e38\u9ad8\u7684\u901a\u7528 key-value \u5b58\u50a8\u7ec4\u4ef6\uff0c\u6211\u4eec\u8003\u5bdf\u4e86 SharedPreferences\u3001NSUserDefaults\u3001SQLite \u7b49\u5e38\u89c1\u7ec4\u4ef6\uff0c\u53d1\u73b0\u90fd\u6ca1\u80fd\u6ee1\u8db3\u5982\u6b64\u82db\u523b\u7684\u6027\u80fd\u8981\u6c42\u3002\u8003\u8651\u5230\u8fd9\u4e2a\u9632 crash \u65b9\u6848\u6700\u4e3b\u8981\u7684\u8bc9\u6c42\u8fd8\u662f\u5b9e\u65f6\u5199\u5165\uff0c\u800c mmap \u5185\u5b58\u6620\u5c04\u6587\u4ef6\u521a\u597d\u6ee1\u8db3\u8fd9\u79cd\u9700\u6c42\uff0c\u6211\u4eec\u5c1d\u8bd5\u901a\u8fc7\u5b83\u6765\u5b9e\u73b0\u4e00\u5957 key-value \u7ec4\u4ef6\u3002<\/p>\n<h1 data-id=\"heading-3\">3.MMKV \u539f\u7406<\/h1>\n<ul>\n<li>\n<strong>\u5185\u5b58\u51c6\u5907<\/strong> \u901a\u8fc7 mmap \u5185\u5b58\u6620\u5c04\u6587\u4ef6\uff0c\u63d0\u4f9b\u4e00\u6bb5\u53ef\u4f9b\u968f\u65f6\u5199\u5165\u7684\u5185\u5b58\u5757\uff0cApp \u53ea\u7ba1\u5f80\u91cc\u9762\u5199\u6570\u636e\uff0c\u7531\u64cd\u4f5c\u7cfb\u7edf\u8d1f\u8d23\u5c06\u5185\u5b58\u56de\u5199\u5230\u6587\u4ef6\uff0c\u4e0d\u5fc5\u62c5\u5fc3 crash \u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002<\/li>\n<li>\n<strong>\u6570\u636e\u7ec4\u7ec7<\/strong> \u6570\u636e\u5e8f\u5217\u5316\u65b9\u9762\u6211\u4eec\u9009\u7528 protobuf \u534f\u8bae\uff0cpb \u5728\u6027\u80fd\u548c\u7a7a\u95f4\u5360\u7528\u4e0a\u90fd\u6709\u4e0d\u9519\u7684\u8868\u73b0\u3002<\/li>\n<li>\n<strong>\u5199\u5165\u4f18\u5316<\/strong> \u8003\u8651\u5230\u4e3b\u8981\u4f7f\u7528\u573a\u666f\u662f\u9891\u7e41\u5730\u8fdb\u884c\u5199\u5165\u66f4\u65b0\uff0c\u6211\u4eec\u9700\u8981\u6709\u589e\u91cf\u66f4\u65b0\u7684\u80fd\u529b\u3002\u6211\u4eec\u8003\u8651\u5c06\u589e\u91cf kv \u5bf9\u8c61\u5e8f\u5217\u5316\u540e\uff0cappend \u5230\u5185\u5b58\u672b\u5c3e\u3002<\/li>\n<li>\n<strong>\u7a7a\u95f4\u589e\u957f<\/strong> \u4f7f\u7528 append \u5b9e\u73b0\u589e\u91cf\u66f4\u65b0\u5e26\u6765\u4e86\u4e00\u4e2a\u65b0\u7684\u95ee\u9898\uff0c\u5c31\u662f\u4e0d\u65ad append \u7684\u8bdd\uff0c\u6587\u4ef6\u5927\u5c0f\u4f1a\u589e\u957f\u5f97\u4e0d\u53ef\u63a7\u3002\u6211\u4eec\u9700\u8981\u5728\u6027\u80fd\u548c\u7a7a\u95f4\u4e0a\u505a\u4e2a\u6298\u4e2d\u3002<\/li>\n<\/ul>\n<p>\u66f4\u8be6\u7ec6\u7684\u8bbe\u8ba1\u539f\u7406\u53c2\u8003 MMKV \u539f\u7406\u3002<\/p>\n<h1 data-id=\"heading-4\">4.MMKV\u4f18\u52bf\uff1a<\/h1>\n<p>MMKV\u7684\u51fa\u73b0\u5176\u5b9e\u662f\u4e3a\u4e86\u89e3\u51b3SharedPreferences\u7684\u4e00\u4e9b\u95ee\u9898\uff0c\u5fae\u4fe1\u56e2\u961f\u5e0c\u671b\u4ee5\u6b64\u6765\u4ee3\u66ffSharedPreferences\uff0c\u76ee\u524d\u5728Android\u4e2d\uff0c\u5bf9\u4e8e\u7ecf\u5e38\u4f7f\u7528\u7684\u5feb\u901f\u672c\u5730\u5316\u5b58\u50a8\uff0c\u5927\u90e8\u5206\u4eba\u5f80\u5f80\u4f1a\u9009\u62e9SharedPreferences\u6765\u4f5c\u4e3a\u5b58\u50a8\u65b9\u5f0f\uff0c \u4f5c\u4e3aAndroid\u5e93\u4e2d\u81ea\u5e26\u7684\u5b58\u50a8\u65b9\u5f0f\uff0cSharePreferences\u5728\u4f7f\u7528\u65b9\u5f0f\u4e0a\u8fd8\u662f\u5f88\u4fbf\u6377\u7684\uff0c\u4f46\u662f\u4e5f\u5f80\u5f80\u5b58\u5728\u4ee5\u4e0b\u7684\u4e00\u4e9b\u95ee\u9898\u3002<\/p>\n<p>1\u3001\u901a\u8fc7 getSharedPreferences \u53ef\u4ee5\u83b7\u53d6 SP \u5b9e\u4f8b\uff0c\u4ece\u9996\u6b21\u521d\u59cb\u5316\u5230\u8bfb\u5230\u6570\u636e\u4f1a\u5b58\u5728\u5ef6\u8fdf\uff0c\u56e0\u4e3a\u8bfb\u6587\u4ef6\u7684\u64cd\u4f5c\u963b\u585e\u8c03\u7528\u7684\u7ebf\u7a0b\u76f4\u5230\u6587\u4ef6\u8bfb\u53d6\u5b8c\u6bd5\uff0c\u5982\u679c\u5728\u4e3b\u7ebf\u7a0b\u8c03\u7528\uff0c\u53ef\u80fd\u4f1a\u5bf9 UI \u6d41\u7545\u5ea6\u9020\u6210\u5f71\u54cd\u3002(\u7ebf\u7a0b\u963b\u585e)<\/p>\n<p>2\u3001\u867d\u7136\u652f\u6301\u8bbe\u7f6e MODE_MULTI_PROCESS \u6807\u5fd7\u4f4d\uff0c\u4f46\u662f\u8de8\u8fdb\u7a0b\u5171\u4eab SP \u5b58\u5728\u5f88\u591a\u95ee\u9898\uff0c\u6240\u4ee5\u4e0d\u5efa\u8bae\u4f7f\u7528\u8be5\u6a21\u5f0f\u3002\uff08\u6587\u4ef6\u8de8\u8fdb\u7a0b\u5171\u4eab\uff09<\/p>\n<p>3\u3001\u5c06\u6570\u636e\u5199\u5165\u6587\u4ef6\u9700\u8981\u5c06\u6570\u636e\u62f7\u8d1d\u4e24\u6b21\uff0c\u518d\u5199\u5165\u5230\u6587\u4ef6\u4e2d\uff0c\u5982\u679c\u6570\u636e\u91cf\u8fc7\u5927\uff0c\u4e5f\u4f1a\u6709\u5f88\u5927\u7684\u6027\u80fd\u635f\u8017\u3002\uff08\u4e8c\u6b21\u5199\u5165\uff09<\/p>\n<h1 data-id=\"heading-5\">5.MMKV\u652f\u6301\u7684\u6570\u636e\u7c7b\u578b:<\/h1>\n<p>\u652f\u6301\u4ee5\u4e0b Java \u8bed\u8a00\u57fa\u7840\u7c7b\u578b\uff1a<\/p>\n<p>boolean\u3001int\u3001long\u3001float\u3001double\u3001byte[],String\u3001Set,\u4efb\u4f55\u5b9e\u73b0\u4e86Parcelable\u7684\u7c7b\u578b,\u5bf9\u8c61\u5b58\u50a8\u65b9\u5f0f\u662f\uff0c\u8f6c\u5316\u6210json\u4e32\uff0c\u901a\u8fc7\u5b57\u7b26\u4e32\u5b58\u50a8\uff0c\u4f7f\u7528\u7684\u65f6\u5019\u5728\u53d6\u51fa\u6765\u53cd\u5e8f\u5217\u5316.<\/p>\n<h1 data-id=\"heading-6\">6.\u4f9d\u8d56\u5bfc\u5165\uff1a<\/h1>\n<pre><code class=\"hljs language-scss\" lang=\"scss\"><span class=\"hljs-built_in\">implementation<\/span>(libs.mmkv)\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd7684ef3cc.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<h1 data-id=\"heading-7\">7.AGP8.1\u7edf\u4e00\u4f9d\u8d56\u914d\u7f6e\uff1a<\/h1>\n<pre><code class=\"hljs language-ini\" lang=\"ini\"><span class=\"hljs-section\">[versions]<\/span>\n<span class=\"hljs-attr\">agp<\/span> = <span class=\"hljs-string\">\"8.1.0\"<\/span>\n<span class=\"hljs-attr\">org-jetbrains-kotlin-android<\/span> = <span class=\"hljs-string\">\"1.8.0\"<\/span>\n<span class=\"hljs-attr\">core-ktx<\/span> = <span class=\"hljs-string\">\"1.10.1\"<\/span>\n<span class=\"hljs-attr\">junit<\/span> = <span class=\"hljs-string\">\"4.13.2\"<\/span>\n<span class=\"hljs-attr\">androidx-test-ext-junit<\/span> = <span class=\"hljs-string\">\"1.1.5\"<\/span>\n<span class=\"hljs-attr\">espresso-core<\/span> = <span class=\"hljs-string\">\"3.5.1\"<\/span>\n<span class=\"hljs-attr\">appcompat<\/span> = <span class=\"hljs-string\">\"1.6.1\"<\/span>\n<span class=\"hljs-attr\">material<\/span> = <span class=\"hljs-string\">\"1.9.0\"<\/span>\n<span class=\"hljs-attr\">constraintlayout<\/span> = <span class=\"hljs-string\">\"2.1.4\"<\/span>\n<span class=\"hljs-attr\">mmkv<\/span> = <span class=\"hljs-string\">\"1.3.0\"<\/span>\n\u200b\n<span class=\"hljs-section\">[libraries]<\/span>\n<span class=\"hljs-attr\">core-ktx<\/span> = { group = <span class=\"hljs-string\">\"androidx.core\"<\/span>, name = <span class=\"hljs-string\">\"core-ktx\"<\/span>, version.ref = <span class=\"hljs-string\">\"core-ktx\"<\/span> }\n<span class=\"hljs-attr\">junit<\/span> = { group = <span class=\"hljs-string\">\"junit\"<\/span>, name = <span class=\"hljs-string\">\"junit\"<\/span>, version.ref = <span class=\"hljs-string\">\"junit\"<\/span> }\n<span class=\"hljs-attr\">androidx-test-ext-junit<\/span> = { group = <span class=\"hljs-string\">\"androidx.test.ext\"<\/span>, name = <span class=\"hljs-string\">\"junit\"<\/span>, version.ref = <span class=\"hljs-string\">\"androidx-test-ext-junit\"<\/span> }\n<span class=\"hljs-attr\">espresso-core<\/span> = { group = <span class=\"hljs-string\">\"androidx.test.espresso\"<\/span>, name = <span class=\"hljs-string\">\"espresso-core\"<\/span>, version.ref = <span class=\"hljs-string\">\"espresso-core\"<\/span> }\n<span class=\"hljs-attr\">appcompat<\/span> = { group = <span class=\"hljs-string\">\"androidx.appcompat\"<\/span>, name = <span class=\"hljs-string\">\"appcompat\"<\/span>, version.ref = <span class=\"hljs-string\">\"appcompat\"<\/span> }\n<span class=\"hljs-attr\">material<\/span> = { group = <span class=\"hljs-string\">\"com.google.android.material\"<\/span>, name = <span class=\"hljs-string\">\"material\"<\/span>, version.ref = <span class=\"hljs-string\">\"material\"<\/span> }\n<span class=\"hljs-attr\">constraintlayout<\/span> = { group = <span class=\"hljs-string\">\"androidx.constraintlayout\"<\/span>, name = <span class=\"hljs-string\">\"constraintlayout\"<\/span>, version.ref = <span class=\"hljs-string\">\"constraintlayout\"<\/span> }\n<span class=\"hljs-attr\">mmkv<\/span> = { group = <span class=\"hljs-string\">\"com.tencent\"<\/span>, name = <span class=\"hljs-string\">\"mmkv\"<\/span>, version.ref = <span class=\"hljs-string\">\"mmkv\"<\/span> }\n\u200b\n<span class=\"hljs-section\">[plugins]<\/span>\n<span class=\"hljs-attr\">com-android-application<\/span> = { id = <span class=\"hljs-string\">\"com.android.application\"<\/span>, version.ref = <span class=\"hljs-string\">\"agp\"<\/span> }\n<span class=\"hljs-attr\">org-jetbrains-kotlin-android<\/span> = { id = <span class=\"hljs-string\">\"org.jetbrains.kotlin.android\"<\/span>, version.ref = <span class=\"hljs-string\">\"org-jetbrains-kotlin-android\"<\/span> }\n\u200b\n<span class=\"hljs-section\">[bundles]<\/span>\n<\/code><\/pre>\n<h1 data-id=\"heading-8\">8.App.gradle\u914d\u7f6e\uff1a<\/h1>\n<pre><code class=\"hljs language-ini\" lang=\"ini\">@Suppress(\"DSL_SCOPE_VIOLATION\")\nplugins {\n \u00a0 \u00a0alias(libs.plugins.com.android.application)\n \u00a0 \u00a0alias(libs.plugins.org.jetbrains.kotlin.android)\n}\n\u200b\nandroid {\n \u00a0 \u00a0<span class=\"hljs-attr\">namespace<\/span> = <span class=\"hljs-string\">\"com.example.mmkvdemo\"<\/span>\n \u00a0 \u00a0<span class=\"hljs-attr\">compileSdk<\/span> = <span class=\"hljs-number\">33<\/span>\n\u200b\n \u00a0 \u00a0defaultConfig {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">applicationId<\/span> = <span class=\"hljs-string\">\"com.example.mmkvdemo\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">minSdk<\/span> = <span class=\"hljs-number\">23<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">targetSdk<\/span> = <span class=\"hljs-number\">33<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">versionCode<\/span> = <span class=\"hljs-number\">1<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">versionName<\/span> = <span class=\"hljs-string\">\"1.0\"<\/span>\n\u200b\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">testInstrumentationRunner<\/span> = <span class=\"hljs-string\">\"androidx.test.runner.AndroidJUnitRunner\"<\/span>\n \u00a0  }\n\u200b\n \u00a0 \u00a0buildTypes {\n \u00a0 \u00a0 \u00a0 \u00a0release {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">isMinifyEnabled<\/span> = <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0proguardFiles(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0getDefaultProguardFile(\"proguard-android-optimize.txt\"),\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\"proguard-rules.pro\"\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  )\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n \u00a0 \u00a0compileOptions {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">sourceCompatibility<\/span> = JavaVersion.VERSION_<span class=\"hljs-number\">1_8<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">targetCompatibility<\/span> = JavaVersion.VERSION_<span class=\"hljs-number\">1_8<\/span>\n \u00a0  }\n \u00a0 \u00a0kotlinOptions {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-attr\">jvmTarget<\/span> = <span class=\"hljs-string\">\"1.8\"<\/span>\n \u00a0  }\n}\n\u200b\ndependencies {\n \u00a0 \u00a0implementation(libs.core.ktx)\n \u00a0 \u00a0implementation(libs.appcompat)\n \u00a0 \u00a0implementation(libs.material)\n \u00a0 \u00a0implementation(libs.constraintlayout)\n \u00a0 \u00a0implementation(libs.mmkv)\n \u00a0 \u00a0testImplementation(libs.junit)\n \u00a0 \u00a0androidTestImplementation(libs.androidx.test.ext.junit)\n \u00a0 \u00a0androidTestImplementation(libs.espresso.core)\n}\n<\/code><\/pre>\n<h1 data-id=\"heading-9\">9.\u4f7f\u7528java\u5c01\u88c5\u7684\u5de5\u5177\u7c7b\uff1a<\/h1>\n<pre><code class=\"hljs language-typescript\" lang=\"typescript\">package com.<span class=\"hljs-property\">example<\/span>.<span class=\"hljs-property\">lib_common<\/span>.<span class=\"hljs-property\">utils<\/span>;\n\u200b\n<span class=\"hljs-keyword\">import<\/span> android.<span class=\"hljs-property\">content<\/span>.<span class=\"hljs-property\">Context<\/span>;\n<span class=\"hljs-keyword\">import<\/span> android.<span class=\"hljs-property\">os<\/span>.<span class=\"hljs-property\">Environment<\/span>;\n\u200b\n<span class=\"hljs-keyword\">import<\/span> com.<span class=\"hljs-property\">tencent<\/span>.<span class=\"hljs-property\">mmkv<\/span>.<span class=\"hljs-property\">MMKV<\/span>;\n\u200b\n<span class=\"hljs-comment\">\/**\n * <span class=\"hljs-doctag\">@author<\/span>: njb\n * <span class=\"hljs-doctag\">@date<\/span>: 2023\/8\/9 14:53\n * <span class=\"hljs-doctag\">@desc<\/span>:\n *\/<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">MMKVUtils<\/span> {\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-variable constant_\">MMKV<\/span> mmkv;\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> volatile <span class=\"hljs-title class_\">MMKVUtils<\/span> mInstance;\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-title class_\">MMKVUtils<\/span>() {\n\u200b\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">void<\/span> <span class=\"hljs-title function_\">init<\/span>(<span class=\"hljs-params\">Context context<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-title class_\">String<\/span> dir = <span class=\"hljs-title class_\">Environment<\/span>.<span class=\"hljs-title function_\">getExternalStorageDirectory<\/span>().<span class=\"hljs-title function_\">getAbsolutePath<\/span>() + <span class=\"hljs-string\">\"\/mmkv\"<\/span>;\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/mmkv\u521d\u59cb\u5316<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-variable constant_\">MMKV<\/span>.<span class=\"hljs-title function_\">initialize<\/span>(context, dir);\n \u00a0 \u00a0 \u00a0 \u00a0mmkv = <span class=\"hljs-variable constant_\">MMKV<\/span>.<span class=\"hljs-title function_\">mmkvWithID<\/span>(<span class=\"hljs-string\">\"MyMMID\"<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u5f00\u542f\u8de8\u8fdb\u7a0b\u901a\u4fe1<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0mmkv = <span class=\"hljs-variable constant_\">MMKV<\/span>.<span class=\"hljs-title function_\">mmkvWithID<\/span>(<span class=\"hljs-string\">\"MyMMID\"<\/span>, <span class=\"hljs-variable constant_\">MMKV<\/span>.<span class=\"hljs-property\">MULTI_PROCESS_MODE<\/span>);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-title class_\">MMKVUtils<\/span> <span class=\"hljs-title function_\">getInstance<\/span>(<span class=\"hljs-params\"><\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (mInstance == <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0synchronized (<span class=\"hljs-title class_\">MMKVUtils<\/span>.<span class=\"hljs-property\">class<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (mInstance == <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mInstance = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">MMKVUtils<\/span>();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mInstance;\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">void<\/span> <span class=\"hljs-title function_\">encode<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key, <span class=\"hljs-built_in\">Object<\/span> value<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">String<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">String<\/span>) value);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">Integer<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">Integer<\/span>) value);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">Boolean<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">Boolean<\/span>) value);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">Long<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">Long<\/span>) value);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">Float<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">Float<\/span>) value);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (value <span class=\"hljs-keyword\">instanceof<\/span> <span class=\"hljs-title class_\">Double<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">encode<\/span>(key, (<span class=\"hljs-title class_\">Double<\/span>) value);\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">Integer<\/span> <span class=\"hljs-title function_\">decodeInt<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeInt<\/span>(key);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">String<\/span> <span class=\"hljs-title function_\">decodeString<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeString<\/span>(key, <span class=\"hljs-string\">\"\"<\/span>);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">Boolean<\/span> <span class=\"hljs-title function_\">decodeBoolean<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeBool<\/span>(key);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">Long<\/span> <span class=\"hljs-title function_\">decodeLong<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeLong<\/span>(key);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">Float<\/span> <span class=\"hljs-title function_\">decodeFloat<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeFloat<\/span>(key);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title class_\">Double<\/span> <span class=\"hljs-title function_\">decodeDouble<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">String<\/span> key<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> mmkv.<span class=\"hljs-title function_\">decodeDouble<\/span>(key);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">void<\/span> <span class=\"hljs-title function_\">clearAllData<\/span>(<span class=\"hljs-params\"><\/span>){\n \u00a0 \u00a0 \u00a0 \u00a0mmkv.<span class=\"hljs-title function_\">clearAll<\/span>();\n \u00a0  }\n}\n\u200b\n<\/code><\/pre>\n<h1 data-id=\"heading-10\">10.\u4f7f\u7528kotlin\u5c01\u88c5\u7684\u5de5\u5177\u7c7b\uff1a<\/h1>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">package<\/span> com.example.lib_common.utils\n\u200b\n<span class=\"hljs-keyword\">import<\/span> android.content.Context\n<span class=\"hljs-keyword\">import<\/span> com.tencent.mmkv.MMKV\n<span class=\"hljs-keyword\">import<\/span> java.io.File\n<span class=\"hljs-keyword\">import<\/span> java.text.SimpleDateFormat\n<span class=\"hljs-keyword\">import<\/span> java.util.Date\n<span class=\"hljs-keyword\">import<\/span> java.util.Locale\n\u200b\n<span class=\"hljs-comment\">\/**\n * <span class=\"hljs-doctag\">@author<\/span>: njb\n * <span class=\"hljs-doctag\">@date<\/span>: 2023\/8\/9 22:40\n * <span class=\"hljs-doctag\">@desc<\/span>:\n *\/<\/span>\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">MMKVUtil<\/span> <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">constructor<\/span>(){\n \u00a0 \u00a0<span class=\"hljs-keyword\">lateinit<\/span> <span class=\"hljs-keyword\">var<\/span> mmKv:MMKV\n \u00a0 \u00a0<span class=\"hljs-keyword\">companion<\/span> <span class=\"hljs-keyword\">object<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">const<\/span> <span class=\"hljs-keyword\">val<\/span> DATE_FORMAT = <span class=\"hljs-string\">\"yyyy-MM-dd HH.mm.ss\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> instance <span class=\"hljs-keyword\">by<\/span> lazy(LazyThreadSafetyMode.SYNCHRONIZED) { MMKVUtil() }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">init<\/span><span class=\"hljs-params\">(context: <span class=\"hljs-type\">Context<\/span>)<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e00\u79cd\u4f7f\u7528mmkv\u9ed8\u8ba4\u76ee\u5f55<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/MMKV.initialize(context)<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e8c\u79cd\u4f7f\u7528\u81ea\u5b9a\u4e49\u5305\u540d\u76ee\u5f55<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-comment\">\/\/MMKV.initialize(context, FileManager.getStorageRootDir() + FileManager.MMKV_DIR)<\/span>\n\u200b\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> mFileDateFormat = SimpleDateFormat(DATE_FORMAT, Locale.US)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u89c6\u9891\u4fdd\u5b58\u8def\u5f84<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> file =\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0File(FileManager.getMMKVPath(), mFileDateFormat.format(Date()) + <span class=\"hljs-string\">\"\/mmkv\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e09\u79cd\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u7cfb\u7edf\u76ee\u5f55 dcim\u3001download\u3001music\u5176\u4e2d\u4e00\u4e2a\u5373\u53ef<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0MMKV.initialize(context,file.absolutePath)\n \u00a0 \u00a0 \u00a0 \u00a0mmKv = MMKV.mmkvWithID(<span class=\"hljs-string\">\"MyMMKVTestID\"<\/span>, MMKV.MULTI_PROCESS_MODE)\n \u00a0 \u00a0 \u00a0 \u00a0mmKv.encode(<span class=\"hljs-string\">\"bool\"<\/span>, <span class=\"hljs-literal\">true<\/span>)\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initTest<\/span><span class=\"hljs-params\">(context: <span class=\"hljs-type\">Context<\/span>)<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e00\u79cd\u4f7f\u7528mmkv\u9ed8\u8ba4\u76ee\u5f55<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/MMKV.initialize(context)<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e8c\u79cd\u4f7f\u7528\u81ea\u5b9a\u4e49\u5305\u540d\u76ee\u5f55<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0MMKV.initialize(context, FileManager.getStorageRootDir() + FileManager.MMKV_DIR)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u7b2c\u4e09\u79cd\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u7cfb\u7edf\u76ee\u5f55 dcim\u3001download\u3001music\u5176\u4e2d\u4e00\u4e2a\u5373\u53ef<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/MMKV.initialize(context,FileManager.getMMKVPath())<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0mmKv = MMKV.mmkvWithID(<span class=\"hljs-string\">\"MyTestID\"<\/span>, MMKV.MULTI_PROCESS_MODE)\n \u00a0 \u00a0 \u00a0 \u00a0mmKv.encode(<span class=\"hljs-string\">\"bool\"<\/span>, <span class=\"hljs-literal\">true<\/span>)\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">encode<\/span><span class=\"hljs-params\">(key: <span class=\"hljs-type\">String<\/span>, value: <span class=\"hljs-type\">Any<\/span>)<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">when<\/span> (value) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> String -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-built_in\">Int<\/span> -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-built_in\">Boolean<\/span> -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-built_in\">Long<\/span> -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-built_in\">Float<\/span> -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">is<\/span> <span class=\"hljs-built_in\">Double<\/span> -&gt; mmKv.encode(key, value)\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">inline<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-type\">&lt;<span class=\"hljs-keyword\">reified<\/span> T&gt;<\/span> <span class=\"hljs-title\">decode<\/span><span class=\"hljs-params\">(key: <span class=\"hljs-type\">String<\/span>, defaultValue: <span class=\"hljs-type\">T<\/span>)<\/span><\/span>: T = <span class=\"hljs-keyword\">when<\/span> (T::<span class=\"hljs-keyword\">class<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0String::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeString(key, defaultValue <span class=\"hljs-keyword\">as<\/span> String?) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-built_in\">Int<\/span>::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeInt(key, defaultValue <span class=\"hljs-keyword\">as<\/span> <span class=\"hljs-built_in\">Int<\/span>) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-built_in\">Boolean<\/span>::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeBool(key, defaultValue <span class=\"hljs-keyword\">as<\/span> <span class=\"hljs-built_in\">Boolean<\/span>) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-built_in\">Long<\/span>::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeLong(key, defaultValue <span class=\"hljs-keyword\">as<\/span> <span class=\"hljs-built_in\">Long<\/span>) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-built_in\">Float<\/span>::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeFloat(key, defaultValue <span class=\"hljs-keyword\">as<\/span> <span class=\"hljs-built_in\">Float<\/span>) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-built_in\">Double<\/span>::<span class=\"hljs-keyword\">class<\/span> -&gt; mmKv.decodeDouble(key, defaultValue <span class=\"hljs-keyword\">as<\/span> <span class=\"hljs-built_in\">Double<\/span>) <span class=\"hljs-keyword\">as<\/span> T\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">else<\/span> -&gt; <span class=\"hljs-keyword\">throw<\/span> IllegalArgumentException(<span class=\"hljs-string\">\"Unsupported type\"<\/span>)\n \u00a0  }\n}\n\u200b\n\u200b\n<\/code><\/pre>\n<h1 data-id=\"heading-11\">11.\u521d\u59cb\u5316\uff1a<\/h1>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0MyApp.mInstance.initMMKV()\n \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0initMMKVData()\n}\n\u200b\n<span class=\"hljs-keyword\">package<\/span> com.example.mmkvdemo\n\u200b\n<span class=\"hljs-keyword\">import<\/span> android.app.Application\n<span class=\"hljs-keyword\">import<\/span> com.example.mmkvdemo.utils.MMKVUtils\n\u200b\n<span class=\"hljs-comment\">\/**\n * <span class=\"hljs-doctag\">@author<\/span>: njb\n * <span class=\"hljs-doctag\">@date<\/span>: 2023\/8\/9 23:19\n * <span class=\"hljs-doctag\">@desc<\/span>:\n *\/<\/span>\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">MyApp<\/span> :<span class=\"hljs-type\">Application<\/span>(){\n \u00a0 \u00a0<span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onCreate<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onCreate()\n \u00a0 \u00a0 \u00a0 <span class=\"hljs-comment\">\/\/ initMMKV()<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0mInstance = <span class=\"hljs-keyword\">this<\/span>\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initMMKV<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.instance.<span class=\"hljs-keyword\">init<\/span>(<span class=\"hljs-keyword\">this<\/span>)\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">companion<\/span> <span class=\"hljs-keyword\">object<\/span>{\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">lateinit<\/span> <span class=\"hljs-keyword\">var<\/span> mInstance: MyApp\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">set<\/span>\n \u00a0  }\n}\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd768581c9b.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<h1 data-id=\"heading-12\">12.\u7b80\u5355\u4f7f\u7528\uff1a<\/h1>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\">\u200b\n \u00a0 <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0MyApp.mInstance.initMMKV()\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0initMMKVData()\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initMMKVData<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5b58\u50a8\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.instance.encode(<span class=\"hljs-string\">\"key1\"<\/span>, <span class=\"hljs-string\">\"value1\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.instance.encode(<span class=\"hljs-string\">\"key2\"<\/span>, <span class=\"hljs-string\">\"456\"<\/span>)\n \u00a0  }\n \u00a0 \u00a0\n<span class=\"hljs-meta\">@SuppressLint(<span class=\"hljs-string\">\"SetTextI18n\"<\/span>)<\/span>\n<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initView<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0textView.setOnClickListener {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bfb\u53d6\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> value1: String = MMKVUtils.instance.decode(<span class=\"hljs-string\">\"key1\"<\/span>,<span class=\"hljs-string\">\"\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> value2: String = MMKVUtils.instance.decode(<span class=\"hljs-string\">\"key2\"<\/span>,<span class=\"hljs-string\">\"\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0Log.d(TAG, <span class=\"hljs-string\">\"====\u6570\u636e\u4e3a===<span class=\"hljs-variable\">$value1<\/span><span class=\"hljs-variable\">$value2<\/span>\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0textView.text = value1 + value2\n \u00a0  }\n}\n<\/code><\/pre>\n<h1 data-id=\"heading-13\">13.\u9002\u914dAndroid13:<\/h1>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onCreate<\/span><span class=\"hljs-params\">(savedInstanceState: <span class=\"hljs-type\">Bundle<\/span>?)<\/span><\/span> {\n \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onCreate(savedInstanceState)\n \u00a0 \u00a0setContentView(R.layout.activity_main)\n \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u68c0\u67e5\u5e76\u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (checkPermissions()) {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5df2\u7ecf\u6709\u6743\u9650\uff0c\u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0performFileOperations()\n \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0requestPermission()\n \u00a0  }\n \u00a0 \u00a0initView()\n}\n\u200b\n <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">checkPermissions<\/span><span class=\"hljs-params\">()<\/span><\/span>: <span class=\"hljs-built_in\">Boolean<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (VERSION.SDK_INT &gt;= Build.VERSION_CODES.TIRAMISU) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS = arrayOf<string>(Manifest.permission.READ_EXTERNAL_STORAGE)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (permission <span class=\"hljs-keyword\">in<\/span> PERMISSIONS) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (ContextCompat.checkSelfPermission(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0permission\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) != PackageManager.PERMISSION_GRANTED\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (permission <span class=\"hljs-keyword\">in<\/span> PERMISSIONS) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (ContextCompat.checkSelfPermission(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0permission\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) != PackageManager.PERMISSION_GRANTED\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">requestPermission<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.TIRAMISU) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS = arrayOf<string>(Manifest.permission.READ_EXTERNAL_STORAGE)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ActivityCompat.requestPermissions(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0REQUEST_PERMISSION_CODE\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  )\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ActivityCompat.requestPermissions(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0REQUEST_PERMISSION_CODE\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  )\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0MyApp.mInstance.initMMKV()\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0initMMKVData()\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onRequestPermissionsResult<\/span><span class=\"hljs-params\">(\n \u00a0 \u00a0 \u00a0 \u00a0requestCode: <span class=\"hljs-type\">Int<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0permissions: <span class=\"hljs-type\">Array<\/span>&lt;<span class=\"hljs-type\">String<\/span>?&gt;,\n \u00a0 \u00a0 \u00a0 \u00a0grantResults: <span class=\"hljs-type\">IntArray<\/span>\n \u00a0  )<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onRequestPermissionsResult(requestCode, permissions, grantResults)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (requestCode == REQUEST_PERMISSION_CODE) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">var<\/span> allPermissionsGranted = <span class=\"hljs-literal\">true<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (result <span class=\"hljs-keyword\">in<\/span> grantResults) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (result != PackageManager.PERMISSION_GRANTED) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0allPermissionsGranted = <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">break<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (allPermissionsGranted) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6743\u9650\u5df2\u6388\u4e88\uff0c\u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0performFileOperations()\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6743\u9650\u88ab\u62d2\u7edd\uff0c\u5904\u7406\u6743\u9650\u8bf7\u6c42\u5931\u8d25\u7684\u60c5\u51b5<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n<\/string><\/string><\/code><\/pre>\n<h1 data-id=\"heading-14\">14.\u5b8c\u6574\u4f7f\u7528\u4ee3\u7801\uff1a<\/h1>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">package<\/span> com.example.mmkvdemo\n\u200b\n<span class=\"hljs-keyword\">import<\/span> android.Manifest\n<span class=\"hljs-keyword\">import<\/span> android.<span class=\"hljs-keyword\">annotation<\/span>.SuppressLint\n<span class=\"hljs-keyword\">import<\/span> android.content.pm.PackageManager\n<span class=\"hljs-keyword\">import<\/span> android.os.Build\n<span class=\"hljs-keyword\">import<\/span> android.os.Build.VERSION\n<span class=\"hljs-keyword\">import<\/span> android.os.Bundle\n<span class=\"hljs-keyword\">import<\/span> android.util.Log\n<span class=\"hljs-keyword\">import<\/span> android.widget.TextView\n<span class=\"hljs-keyword\">import<\/span> androidx.appcompat.app.AppCompatActivity\n<span class=\"hljs-keyword\">import<\/span> androidx.core.app.ActivityCompat\n<span class=\"hljs-keyword\">import<\/span> androidx.core.content.ContextCompat\n<span class=\"hljs-keyword\">import<\/span> com.example.mmkvdemo.utils.MMKVUtils\n\u200b\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">MainActivity<\/span> : <span class=\"hljs-type\">AppCompatActivity<\/span>() {\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">val<\/span> TAG = MainActivity::<span class=\"hljs-keyword\">class<\/span>.java.name\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">val<\/span> REQUEST_PERMISSION_CODE = <span class=\"hljs-number\">100<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">var<\/span> PERMISSIONS: Array<string> = arrayOf(\n \u00a0 \u00a0 \u00a0 \u00a0Manifest.permission.WRITE_EXTERNAL_STORAGE,\n \u00a0 \u00a0 \u00a0 \u00a0Manifest.permission.READ_EXTERNAL_STORAGE\n \u00a0  )\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">val<\/span> textView:TextView <span class=\"hljs-keyword\">by<\/span> lazy { findViewById(R.id.tv_test) }\n \u00a0 \u00a0<span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onCreate<\/span><span class=\"hljs-params\">(savedInstanceState: <span class=\"hljs-type\">Bundle<\/span>?)<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onCreate(savedInstanceState)\n \u00a0 \u00a0 \u00a0 \u00a0setContentView(R.layout.activity_main)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u68c0\u67e5\u5e76\u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (checkPermissions()) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5df2\u7ecf\u6709\u6743\u9650\uff0c\u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0performFileOperations()\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0requestPermission()\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0initView()\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-meta\">@SuppressLint(<span class=\"hljs-string\">\"SetTextI18n\"<\/span>)<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initView<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0textView.setOnClickListener {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bfb\u53d6\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> value1: String = MMKVUtils.instance.decode(<span class=\"hljs-string\">\"key1\"<\/span>,<span class=\"hljs-string\">\"\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> value2: String = MMKVUtils.instance.decode(<span class=\"hljs-string\">\"key2\"<\/span>,<span class=\"hljs-string\">\"\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Log.d(TAG, <span class=\"hljs-string\">\"====\u6570\u636e\u4e3a===<span class=\"hljs-variable\">$value1<\/span><span class=\"hljs-variable\">$value2<\/span>\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0textView.text = value1 + value2\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">checkPermissions<\/span><span class=\"hljs-params\">()<\/span><\/span>: <span class=\"hljs-built_in\">Boolean<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (VERSION.SDK_INT &gt;= Build.VERSION_CODES.TIRAMISU) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS = arrayOf<string>(Manifest.permission.READ_EXTERNAL_STORAGE)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (permission <span class=\"hljs-keyword\">in<\/span> PERMISSIONS) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (ContextCompat.checkSelfPermission(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0permission\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) != PackageManager.PERMISSION_GRANTED\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (permission <span class=\"hljs-keyword\">in<\/span> PERMISSIONS) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (ContextCompat.checkSelfPermission(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0permission\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) != PackageManager.PERMISSION_GRANTED\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  ) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">requestPermission<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.TIRAMISU) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS = arrayOf<string>(Manifest.permission.READ_EXTERNAL_STORAGE)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ActivityCompat.requestPermissions(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0REQUEST_PERMISSION_CODE\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  )\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ActivityCompat.requestPermissions(\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">this<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0PERMISSIONS,\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0REQUEST_PERMISSION_CODE\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  )\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0MyApp.mInstance.initMMKV()\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0initMMKVData()\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initMMKVData<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5b58\u50a8\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.instance.encode(<span class=\"hljs-string\">\"key1\"<\/span>, <span class=\"hljs-string\">\"value1\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.instance.encode(<span class=\"hljs-string\">\"key2\"<\/span>, <span class=\"hljs-string\">\"456\"<\/span>)\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onRequestPermissionsResult<\/span><span class=\"hljs-params\">(\n \u00a0 \u00a0 \u00a0 \u00a0requestCode: <span class=\"hljs-type\">Int<\/span>,\n \u00a0 \u00a0 \u00a0 \u00a0permissions: <span class=\"hljs-type\">Array<\/span>&lt;<span class=\"hljs-type\">String<\/span>?&gt;,\n \u00a0 \u00a0 \u00a0 \u00a0grantResults: <span class=\"hljs-type\">IntArray<\/span>\n \u00a0  )<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onRequestPermissionsResult(requestCode, permissions, grantResults)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (requestCode == REQUEST_PERMISSION_CODE) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">var<\/span> allPermissionsGranted = <span class=\"hljs-literal\">true<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (result <span class=\"hljs-keyword\">in<\/span> grantResults) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (result != PackageManager.PERMISSION_GRANTED) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0allPermissionsGranted = <span class=\"hljs-literal\">false<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">break<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (allPermissionsGranted) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6743\u9650\u5df2\u6388\u4e88\uff0c\u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0performFileOperations()\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6743\u9650\u88ab\u62d2\u7edd\uff0c\u5904\u7406\u6743\u9650\u8bf7\u6c42\u5931\u8d25\u7684\u60c5\u51b5<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n}\n<\/string><\/string><\/string><\/code><\/pre>\n<h1 data-id=\"heading-15\">15.\u5e03\u5c40\u4ee3\u7801\uff1a<\/h1>\n<pre><code class=\"hljs language-ini\" lang=\"ini\"><?xml <span class=\"hljs-attr\">version=<span class=\"hljs-string\">\"1.0\"<\/span> encoding=<span class=\"hljs-string\">\"utf-8\"<\/span>?&gt;\nandroid=<span class=\"hljs-string\">\"http:\/\/schemas.android.com\/apk\/res\/android\"<\/span>\n \u00a0 \u00a0xmlns:<span class=\"hljs-attr\">app<\/span>=<span class=\"hljs-string\">\"http:\/\/schemas.android.com\/apk\/res-auto\"<\/span>\n \u00a0 \u00a0xmlns:<span class=\"hljs-attr\">tools<\/span>=<span class=\"hljs-string\">\"http:\/\/schemas.android.com\/tools\"<\/span>\n \u00a0 \u00a0android:<span class=\"hljs-attr\">layout_width<\/span>=<span class=\"hljs-string\">\"match_parent\"<\/span>\n \u00a0 \u00a0android:<span class=\"hljs-attr\">layout_height<\/span>=<span class=\"hljs-string\">\"match_parent\"<\/span>\n \u00a0 \u00a0tools:<span class=\"hljs-attr\">context<\/span>=<span class=\"hljs-string\">\".MainActivity\"<\/span>&gt;\n\u200b\n \u00a0 \u00a0<textview class=\"hljs-attr\">id=<span class=\"hljs-string\">\"@+id\/tv_test\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0android:<span class=\"hljs-attr\">layout_width<\/span>=<span class=\"hljs-string\">\"wrap_content\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0android:<span class=\"hljs-attr\">layout_height<\/span>=<span class=\"hljs-string\">\"wrap_content\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0android:<span class=\"hljs-attr\">text<\/span>=<span class=\"hljs-string\">\"Hello World!\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0app:<span class=\"hljs-attr\">layout_constraintBottom_toBottomOf<\/span>=<span class=\"hljs-string\">\"parent\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0app:<span class=\"hljs-attr\">layout_constraintEnd_toEndOf<\/span>=<span class=\"hljs-string\">\"parent\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0app:<span class=\"hljs-attr\">layout_constraintStart_toStartOf<\/span>=<span class=\"hljs-string\">\"parent\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0app:<span class=\"hljs-attr\">layout_constraintTop_toTopOf<\/span>=<span class=\"hljs-string\">\"parent\"<\/span> \/&gt;\n\u200b\n<\/textview>\n<\/code><\/pre>\n<h1 data-id=\"heading-16\">16.\u8de8\u8fdb\u7a0b\u4f7f\u7528\uff1a<\/h1>\n<h2 data-id=\"heading-17\">16.1 \u4e3bApp\u5b58\u50a8\u6570\u636e<\/h2>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">onCreate<\/span><span class=\"hljs-params\">(savedInstanceState: <span class=\"hljs-type\">Bundle<\/span>?)<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">super<\/span>.onCreate(savedInstanceState)\n \u00a0 \u00a0 \u00a0 \u00a0setContentView(R.layout.activity_main)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u68c0\u67e5\u5e76\u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (checkPermissions()) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5df2\u7ecf\u6709\u6743\u9650\uff0c\u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0performFileOperations()\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">else<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bf7\u6c42\u6743\u9650<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0requestPermission()\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0initView()\n }\n\u200b\n<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/BaseApplication.Instance.initMMKV()<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u6267\u884c\u6587\u4ef6\u8bfb\u5199\u64cd\u4f5c<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0initMMKVData()\n}\n\u200b\n<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initMMKVData<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u5b58\u50a8\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"key1\"<\/span>, <span class=\"hljs-string\">\"\u7528\u6237\u5c0f\u660e\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"age\"<\/span>, \u00a0<span class=\"hljs-number\">23<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"sex\"<\/span>, <span class=\"hljs-string\">\"\u7537\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"address\"<\/span>, <span class=\"hljs-string\">\"\u5317\u4eac\u5e02\u671d\u9633\u533a\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"birthday\"<\/span>, <span class=\"hljs-string\">\"2020-01-18\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"account\"<\/span>, <span class=\"hljs-string\">\"188888\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"identity\"<\/span>, <span class=\"hljs-literal\">false<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"amount\"<\/span>, <span class=\"hljs-number\">888888.88<\/span>)\n}\n\u200b\n<span class=\"hljs-meta\">@SuppressLint(<span class=\"hljs-string\">\"SetTextI18n\"<\/span>)<\/span>\n<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initView<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 textView.setOnClickListener {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ \u8bfb\u53d6\u6570\u636e<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> value1: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"key1\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> age: <span class=\"hljs-built_in\">Int<\/span> = MMKVUtils.getInstance().decodeInt(<span class=\"hljs-string\">\"age\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> sex: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"sex\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> address: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"address\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> birthday: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"birthday\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> account: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"account\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> identity: <span class=\"hljs-built_in\">Boolean<\/span> = MMKVUtils.getInstance().decodeBoolean(<span class=\"hljs-string\">\"identity\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> amount: <span class=\"hljs-built_in\">Double<\/span> = MMKVUtils.getInstance().decodeDouble(<span class=\"hljs-string\">\"amount\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Log.d(TAG, <span class=\"hljs-string\">\"====\u6570\u636e\u4e3a===<span class=\"hljs-variable\">$value1<\/span><span class=\"hljs-variable\">$age<\/span><span class=\"hljs-variable\">$sex<\/span><span class=\"hljs-variable\">$address<\/span><span class=\"hljs-variable\">$birthday<\/span><span class=\"hljs-variable\">$account<\/span><span class=\"hljs-variable\">$identity<\/span><span class=\"hljs-variable\">$account<\/span><span class=\"hljs-variable\">$amount<\/span>\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0textView.text = value1\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0ToolUtils.openApp(<span class=\"hljs-string\">\"com.example.testmmkv\"<\/span>, <span class=\"hljs-keyword\">this<\/span><span class=\"hljs-symbol\">@MainActivity<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-comment\">\/\/ ToolUtils.openThirdApp(\"om.example.testmmkv\", this@MainActivity)<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }<span class=\"hljs-keyword\">catch<\/span> (e:Exception){\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0e.printStackTrace()\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n}\n\u200b\n\u200b\n<\/code><\/pre>\n<h2 data-id=\"heading-18\">16.2 \u8de8\u8fdb\u7a0bTestApp\u63a5\u6536\u6570\u636e:<\/h2>\n<pre><code class=\"hljs language-kotlin\" lang=\"kotlin\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">performFileOperations<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 <span class=\"hljs-comment\">\/\/ BaseApplication.Instance.initMMKV()<\/span>\n \u00a0 \u00a0initData()\n}\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">fun<\/span> <span class=\"hljs-title\">initData<\/span><span class=\"hljs-params\">()<\/span><\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> userName = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"key1\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> age: <span class=\"hljs-built_in\">Int<\/span> = MMKVUtils.getInstance().decodeInt(<span class=\"hljs-string\">\"age\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> sex: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"sex\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> address: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"address\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> birthday: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"birthday\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> account: String = MMKVUtils.getInstance().decodeString(<span class=\"hljs-string\">\"account\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> identity: <span class=\"hljs-built_in\">Boolean<\/span> = MMKVUtils.getInstance().decodeBoolean(<span class=\"hljs-string\">\"identity\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">val<\/span> amount: <span class=\"hljs-built_in\">Double<\/span> = MMKVUtils.getInstance().decodeDouble(<span class=\"hljs-string\">\"amount\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0textView.text = <span class=\"hljs-string\">\"\u7528\u6237\u59d3\u540d\uff1a<span class=\"hljs-variable\">$userName<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvAddress.text = <span class=\"hljs-string\">\"\u7528\u6237\u5730\u5740\uff1a<span class=\"hljs-variable\">$address<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvAge.text = <span class=\"hljs-string\">\"\u7528\u6237\u5e74\u9f84\uff1a<span class=\"hljs-variable\">$age<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvAccount.text = <span class=\"hljs-string\">\"\u7528\u6237\u8d26\u53f7\uff1a<span class=\"hljs-variable\">$account<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvAmount.text = <span class=\"hljs-string\">\"\u7528\u6237\u91d1\u989d\uff1a<span class=\"hljs-variable\">$amount<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvBirthday.text = <span class=\"hljs-string\">\"\u7528\u6237\u751f\u65e5\uff1a<span class=\"hljs-variable\">$birthday<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvIdentity.text = <span class=\"hljs-string\">\"\u662f\u5426\u515a\u5458\uff1a<span class=\"hljs-variable\">$identity<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0tvSex.text = <span class=\"hljs-string\">\"\u7528\u6237\u6027\u522b:<span class=\"hljs-variable\">$sex<\/span>\"<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0Log.d(TAG, <span class=\"hljs-string\">\"====\u8de8\u8fdb\u7a0b\u901a\u4fe1\u6d4b\u8bd5\u6570\u636e===<span class=\"hljs-variable\">$userName<\/span><span class=\"hljs-variable\">$age<\/span><span class=\"hljs-variable\">$sex<\/span><span class=\"hljs-variable\">$address<\/span><span class=\"hljs-variable\">$birthday<\/span><span class=\"hljs-variable\">$account<\/span><span class=\"hljs-variable\">$identity<\/span><span class=\"hljs-variable\">$account<\/span><span class=\"hljs-variable\">$amount<\/span>\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0tvBack.setOnClickListener {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0MMKVUtils.getInstance().encode(<span class=\"hljs-string\">\"backKey\"<\/span>,<span class=\"hljs-string\">\"\u7528\u6237\u5c0f\u660e\u56de\u5230\u539f\u6765\u7684\u5e94\u7528\"<\/span>)\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0finish()\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-comment\">\/\/ ToolUtils.openApp(\"com.example.mmkvdemo\", this@MainActivity)<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/ ToolUtils.openThirdApp(\"om.example.testmmkv\", this@MainActivity)<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }<span class=\"hljs-keyword\">catch<\/span> (e:Exception){\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0e.printStackTrace()\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n<\/code><\/pre>\n<h1 data-id=\"heading-19\">17.\u65e5\u5fd7\u6253\u5370:<\/h1>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd768618c7e.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd768689320.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd76871e902.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<h1 data-id=\"heading-20\">18.\u6253\u5f00\u7b2c\u4e09\u65b9app\u5de5\u5177\u7c7b:<\/h1>\n<pre><code class=\"hljs language-java\" lang=\"java\"><span class=\"hljs-keyword\">package<\/span> com.example.mmkvdemo.utils;\n\u200b\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-keyword\">static<\/span> android.content.Context.ACTIVITY_SERVICE;\n\u200b\n<span class=\"hljs-keyword\">import<\/span> android.app.Activity;\n<span class=\"hljs-keyword\">import<\/span> android.app.ActivityManager;\n<span class=\"hljs-keyword\">import<\/span> android.content.ComponentName;\n<span class=\"hljs-keyword\">import<\/span> android.content.Context;\n<span class=\"hljs-keyword\">import<\/span> android.content.Intent;\n<span class=\"hljs-keyword\">import<\/span> android.content.pm.PackageInfo;\n<span class=\"hljs-keyword\">import<\/span> android.content.pm.PackageManager;\n<span class=\"hljs-keyword\">import<\/span> android.net.Uri;\n<span class=\"hljs-keyword\">import<\/span> android.os.Bundle;\n<span class=\"hljs-keyword\">import<\/span> android.util.Log;\n\u200b\n<span class=\"hljs-keyword\">import<\/span> java.io.BufferedReader;\n<span class=\"hljs-keyword\">import<\/span> java.io.InputStreamReader;\n<span class=\"hljs-keyword\">import<\/span> java.lang.reflect.Method;\n<span class=\"hljs-keyword\">import<\/span> java.util.List;\n\u200b\n<span class=\"hljs-comment\">\/**\n * <span class=\"hljs-doctag\">@author<\/span>: njb\n * <span class=\"hljs-doctag\">@date<\/span>: 2023\/8\/8 0:03\n * <span class=\"hljs-doctag\">@desc<\/span>:\n *\/<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">ToolUtils<\/span> {\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-type\">String<\/span> <span class=\"hljs-variable\">TAG<\/span> <span class=\"hljs-operator\">=<\/span> ToolUtils.class.getName();\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u6253\u5f00\u8f6f\u4ef6\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> packageName \u5305\u540d\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> context \u00a0 \u00a0 \u4e0a\u4e0b\u6587\u5bf9\u8c61\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">openApp<\/span><span class=\"hljs-params\">(String packageName, Context context)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (packageName != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">PackageManager<\/span> <span class=\"hljs-variable\">packageManager<\/span> <span class=\"hljs-operator\">=<\/span> context.getPackageManager();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Intent<\/span> <span class=\"hljs-variable\">intent<\/span> <span class=\"hljs-operator\">=<\/span> packageManager.getLaunchIntentForPackage(packageName);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0context.startActivity(intent);\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">openApp<\/span><span class=\"hljs-params\">(String packageName, Context context, Bundle bundle)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Intent<\/span> <span class=\"hljs-variable\">intent<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Intent<\/span>();\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ComponentName<\/span> <span class=\"hljs-variable\">comp<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ComponentName<\/span>(<span class=\"hljs-string\">\"com.tencent.mobileqq\"<\/span>, <span class=\"hljs-string\">\"com.tencent.mobileqq.activity.SplashActivity\"<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0intent.setComponent(comp);\n \u00a0 \u00a0 \u00a0 \u00a0intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n \u00a0 \u00a0 \u00a0 \u00a0context.startActivity(intent);\n \u00a0  }\n\u200b\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u83b7\u53d6\u524d\u53f0\u7a0b\u5e8f\u5305\u540d\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> String <span class=\"hljs-title function_\">getForegroundAppPackageName<\/span><span class=\"hljs-params\">(Context context)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ActivityManager<\/span> <span class=\"hljs-variable\">am<\/span> <span class=\"hljs-operator\">=<\/span> (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);\n \u00a0 \u00a0 \u00a0 \u00a0List taskInfo = am.getRunningTasks(<span class=\"hljs-number\">1<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ComponentName<\/span> <span class=\"hljs-variable\">componentInfo<\/span> <span class=\"hljs-operator\">=<\/span> taskInfo.get(<span class=\"hljs-number\">0<\/span>).topActivity;\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> componentInfo.getPackageName();\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u6839\u636e\u62a5\u540d\u6740\u6b7b\u5e94\u7528\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">killApp<\/span><span class=\"hljs-params\">(Context context, String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ActivityManager<\/span> <span class=\"hljs-variable\">m<\/span> <span class=\"hljs-operator\">=<\/span> (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Method<\/span> <span class=\"hljs-variable\">method<\/span> <span class=\"hljs-operator\">=<\/span> m.getClass().getMethod(<span class=\"hljs-string\">\"forceStopPackage\"<\/span>, String.class);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0method.setAccessible(<span class=\"hljs-literal\">true<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0method.invoke(m, packageName);\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0e.printStackTrace();\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u6740\u6b7b\u7b2c\u4e09\u65b9\u5e94\u7528\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> context\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> packageName\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">killThirdApp<\/span><span class=\"hljs-params\">(Context context, String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (packageName != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0killApp(context, packageName);\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n\u200b\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u83b7\u53d6\u524d\u53f0activity\u540d\u79f0\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> context\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@return<\/span>\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> String <span class=\"hljs-title function_\">getForegroundActivityName<\/span><span class=\"hljs-params\">(Context context)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (context == <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"\"<\/span>;\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ActivityManager<\/span> <span class=\"hljs-variable\">am<\/span> <span class=\"hljs-operator\">=<\/span> (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n \u00a0 \u00a0 \u00a0 \u00a0List list = am.getRunningTasks(<span class=\"hljs-number\">1<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (list != <span class=\"hljs-literal\">null<\/span> &amp;&amp; list.size() &gt; <span class=\"hljs-number\">0<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">ComponentName<\/span> <span class=\"hljs-variable\">cpn<\/span> <span class=\"hljs-operator\">=<\/span> list.get(<span class=\"hljs-number\">0<\/span>).topActivity;\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> cpn.getClassName();\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"\"<\/span>;\n \u00a0  }\n\u200b\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u5224\u65adAPP\u662f\u5426\u5b89\u88c5\u4e86\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> packageName \u5305\u540d\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@return<\/span>\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">boolean<\/span> <span class=\"hljs-title function_\">isAppInstalled<\/span><span class=\"hljs-params\">(Context context, String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">PackageManager<\/span> <span class=\"hljs-variable\">packageManager<\/span> <span class=\"hljs-operator\">=<\/span> context.getPackageManager();\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>;\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">catch<\/span> (PackageManager.NameNotFoundException e) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0e.printStackTrace();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>;\n \u00a0 \u00a0 \u00a0  }\n \u00a0  }\n\u200b\n\u200b\n\u200b\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">unInstall<\/span><span class=\"hljs-params\">(Context context, String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (packageName == <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span>;\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Uri<\/span> <span class=\"hljs-variable\">uri<\/span> <span class=\"hljs-operator\">=<\/span> Uri.parse(<span class=\"hljs-string\">\"package:\"<\/span> + packageName);\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Intent<\/span> <span class=\"hljs-variable\">uninstall<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Intent<\/span>(Intent.ACTION_DELETE, uri);\n \u00a0 \u00a0 \u00a0 \u00a0uninstall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n \u00a0 \u00a0 \u00a0 \u00a0context.startActivity(uninstall);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u9759\u9ed8\u5378\u8f7dApp\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> packageName  \u5305\u540d\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@return<\/span> \u662f\u5426\u5378\u8f7d\u6210\u529f\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">boolean<\/span> <span class=\"hljs-title function_\">uninstall<\/span><span class=\"hljs-params\">(String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">Process<\/span> <span class=\"hljs-variable\">process<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-literal\">null<\/span>;\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">BufferedReader<\/span> <span class=\"hljs-variable\">successResult<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-literal\">null<\/span>;\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">BufferedReader<\/span> <span class=\"hljs-variable\">errorResult<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-literal\">null<\/span>;\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">StringBuilder<\/span> <span class=\"hljs-variable\">successMsg<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">StringBuilder<\/span>();\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-type\">StringBuilder<\/span> <span class=\"hljs-variable\">errorMsg<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">StringBuilder<\/span>();\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0process = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ProcessBuilder<\/span>(<span class=\"hljs-string\">\"pm\"<\/span>, <span class=\"hljs-string\">\"uninstall\"<\/span>, packageName).start();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0successResult = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">BufferedReader<\/span>(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">InputStreamReader<\/span>(process.getInputStream()));\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0errorResult = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">BufferedReader<\/span>(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">InputStreamReader<\/span>(process.getErrorStream()));\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0String s;\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">while<\/span> ((s = successResult.readLine()) != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0successMsg.append(s);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">while<\/span> ((s = errorResult.readLine()) != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0errorMsg.append(s);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Log.d(<span class=\"hljs-string\">\"e = \"<\/span> , e.toString());\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">finally<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (successResult != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0successResult.close();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (errorResult != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0errorResult.close();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Log.d(<span class=\"hljs-string\">\"Exception : \"<\/span> , e.toString());\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (process != <span class=\"hljs-literal\">null<\/span>) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0process.destroy();\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-comment\">\/\/\u5982\u679c\u542b\u6709\"success\"\u5355\u8bcd\u5219\u8ba4\u4e3a\u5378\u8f7d\u6210\u529f<\/span>\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> successMsg.toString().equalsIgnoreCase(<span class=\"hljs-string\">\"success\"<\/span>);\n \u00a0  }\n\u200b\n \u00a0 \u00a0<span class=\"hljs-comment\">\/**\n \u00a0 \u00a0 * \u5224\u65ad\u5e94\u7528\u662f\u5426\u5b58\u5728\n \u00a0 \u00a0 *\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> context \u00a0 \u00a0 \u4e0a\u4e0b\u6587\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@param<\/span> packageName \u5305\u540d\n \u00a0 \u00a0 * <span class=\"hljs-doctag\">@return<\/span> \u662f\u5426\u5b58\u5728\n \u00a0 \u00a0 *\/<\/span>\n \u00a0 \u00a0<span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-type\">boolean<\/span> <span class=\"hljs-title function_\">appExist<\/span><span class=\"hljs-params\">(Context context, String packageName)<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">try<\/span> {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0List<packageinfo> packageInfoList = context.getPackageManager().getInstalledPackages(<span class=\"hljs-number\">0<\/span>);\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">for<\/span> (PackageInfo packageInfo : packageInfoList) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">if<\/span> (packageInfo.packageName.equalsIgnoreCase(packageName)) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">true<\/span>;\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0  } <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Log.d(TAG,e.toString());\n \u00a0 \u00a0 \u00a0  }\n \u00a0 \u00a0 \u00a0 \u00a0<span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-literal\">false<\/span>;\n \u00a0  }\n}\n<\/packageinfo><\/code><\/pre>\n<h1 data-id=\"heading-21\">19.\u5b9e\u73b0\u6548\u679c\uff1a<\/h1>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd76879bfe2.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/newstrong.xyz\/wp-content\/uploads\/2024\/08\/post-153-66cd76881deb4.\" alt=\"image.png\" loading=\"lazy\"><\/p>\n<h1 data-id=\"heading-22\">20.\u603b\u7ed3\uff1a<\/h1>\n<p>\u4ee5\u4e0a\u5c31\u662f\u4eca\u5929\u7684\u5185\u5bb9\u4f7f\u7528Kotlin\u5c01\u88c5\u57fa\u4e8eMMKV\u7684\u5de5\u5177\u7c7b\uff0c\u76ee\u524d\u57fa\u672c\u7684\u6570\u636e\u5b58\u50a8\u6ca1\u5565\u95ee\u9898\uff0c\u4f46\u662f\u8de8\u8fdb\u7a0b\u5728Android13\u4e2d\u6709\u70b9\u95ee\u9898\uff0c\u4e24\u4e2aapp\u7684\u5b58\u50a8\u76ee\u5f55\u4e0d\u4e00\u6837\u5bfc\u81f4\u6570\u636e\u50a8\u5b58\u6210\u529f\uff0c\u4f46\u662f\u8de8\u8fdb\u7a0b\u65f6\u53ea\u80fd\u8bfb\u53d6\u5230\u672capp\u76ee\u5f55\u4e0b\u7684\u6570\u636e\uff0c\u8fd8\u6ca1\u60f3\u597d\u89e3\u51b3\u65b9\u6cd5\uff0cAndroid9\u4e2d\u53ca\u4ee5\u4e0b\u662f\u53ef\u4ee5\u6b63\u5e38\u4f7f\u7528\u7684\uff0c\u56e0\u4e3a11\u53ca\u4ee5\u4e0a\u5185\u5916\u90e8\u5b58\u50a8\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u5b98\u7f51\u57281.3.1\u7248\u672c\u4e2d\u66f4\u65b0\u4e86\u5173\u4e8eAndroid13\u7684\u9002\u914d\uff0c\u4ed6\u4eec\u7ed9\u51fa\u7684\u65b9\u6848\u628a\u4e24\u4e2aapp\u7684mmkv\u6587\u4ef6\u5b58\u50a8\u5199\u5165\u5230\u540c\u4e00\u4e2a\u516c\u5171\u7684\u76ee\u5f55\uff0c\u540e\u9762\u6709\u65f6\u95f4\u5728\u5c1d\u8bd5\u4e00\u4e0b\uff0c\u5982\u6709\u89e3\u51b3\u7684\u5c0f\u4f19\u4f34\u4eec\u8bf4\u4e00\u4e0b.<\/p>\n<h1 data-id=\"heading-23\">21.\u9879\u76eedemo\u6e90\u7801\uff1a<\/h1>\n<p><a href=\"https:\/\/gitee.com\/jackning_admin\/mmkvutils-demo\">\u6e90\u7801<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Android\u4f7f\u7528Kotlin\u5c01\u88c5MMKVUtils \u5927\u9f84\u5c0f\u6e23\u6e23 2023-09-07 3,584 \u9605\u8bfb10\u5206&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":156,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android"],"_links":{"self":[{"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/posts\/153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/comments?post=153"}],"version-history":[{"count":0,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/posts\/153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/media\/156"}],"wp:attachment":[{"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/media?parent=153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/categories?post=153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/newstrong.top\/index.php\/wp-json\/wp\/v2\/tags?post=153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}