{"id":964,"date":"2015-08-14T11:03:36","date_gmt":"2015-08-14T03:03:36","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=964"},"modified":"2026-08-18T12:58:44","modified_gmt":"2026-08-18T04:58:44","slug":"%e5%9b%be%e7%89%87%e7%bc%93%e5%ad%98%e6%8a%80%e6%9c%af","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=964","title":{"rendered":"\u56fe\u7247\u7f13\u5b58\u673a\u5236"},"content":{"rendered":"<section id=\"wenyan\" style=\"font-family: system-ui, 'Apple Color Emoji', 'Segoe UI', 'Segoe UI Symbol', 'Noto Sans', Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: #000000; caret-color: #000000;\" data-provider=\"WenYan\">\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid #ef7060; color: #6a737d; padding: 10px 10px 10px 20px; background: #fff9f9;\">\n<p style=\"margin: 1em 0px;\">\u5728 <a href=\"https:\/\/ai.zhousir.top\/?p=955\">Android\u52a0\u8f7d\u7f51\u7edc\u56fe\u7247<\/a> \u4e00\u7ae0\u91cc\uff0c\u6eda\u52a8\u5217\u8868\u4f1a\u53cd\u590d\u89e6\u53d1\u5f02\u6b65\u4efb\u52a1\u91cd\u65b0\u4e0b\u8f7d\uff0c\u65e2\u8d39\u6d41\u91cf\u4f53\u9a8c\u4e5f\u5dee\u3002\u663e\u793a\u524d\u5148\u67e5\u7f13\u5b58\uff1a\u5185\u5b58\u7f13\u5b58\u7528 <strong>LruCache<\/strong>\uff0c\u6587\u4ef6\u7f13\u5b58\u7528 <strong>DiskLruCache<\/strong>\u3002<\/p>\n<\/blockquote>\n<p><!--more--><\/p>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e00\u3001\u5185\u5b58\u7f13\u5b58 LruCache<\/span><\/h2>\n<p style=\"margin: 1em 0px;\">Lru \u662f\u6700\u8fd1\u6700\u5c11\u4f7f\u7528\u3002\u5148\u5b9a\u7f13\u5b58\u4e0a\u9650\uff0c\u7a7a\u95f4\u4e0d\u591f\u65f6\u6309 Lru \u56de\u6536\u6700\u4e45\u6ca1\u7528\u7684 Bitmap\u3002Google \u5df2\u63d0\u4f9b <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">LruCache<\/code>\uff0c\u5e38\u7528\u6700\u5927\u53ef\u7528\u5185\u5b58\u7684 1\/8\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">private LruCache&lt;String, Bitmap&gt; mMemoryCache;\nint maxMemory = (int) Runtime.getRuntime().maxMemory();\nint cacheSize = maxMemory \/ 8;\nmMemoryCache = new LruCache&lt;String, Bitmap&gt;(cacheSize) {\n    @Override\n    protected int sizeOf(String key, Bitmap bitmap) {\n        return bitmap.getByteCount();\n    }\n};<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5199\u5165\u524d\u5148\u67e5\uff0c\u907f\u514d\u8986\u76d6\uff1b\u8bfb\u53d6\u4e0d\u5b58\u5728\u5219\u8fd4\u56de null\u3002key \u7528\u56fe\u7247 URL\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public void addBitmapToMemoryCache(String key, Bitmap bitmap) {\n    if (getBitmapFromMemoryCache(key) == null) {\n        mMemoryCache.put(key, bitmap);\n    }\n}\n\npublic Bitmap getBitmapFromMemoryCache(String key) {\n    return mMemoryCache.get(key);\n}<\/code><\/pre>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e8c\u3001\u6587\u4ef6\u7f13\u5b58 DiskLruCache<\/span><\/h2>\n<p style=\"margin: 1em 0px;\">\u5185\u5b58\u6709\u9650\u3001\u56fe\u591a\u65f6\u518d\u52a0\u78c1\u76d8\u3002\u67e5\u627e\u987a\u5e8f\uff1a\u5185\u5b58 \u2192 \u6587\u4ef6 \u2192 \u7f51\u7edc\u3002DiskLruCache \u6e90\u7801\u5728 Google Source\uff1aandroid.googlesource.com\/platform\/libcore\/+\/jb-mr2-release\/luni\/src\/main\/java\/libcore\/io\/DiskLruCache.java<\/p>\n<p style=\"margin: 1em 0px;\"><code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">open()<\/code> \u56db\u4e2a\u53c2\u6570\uff1a\u7f13\u5b58\u76ee\u5f55\u3001\u5e94\u7528 versionCode\u3001\u540c\u4e00 key \u5bf9\u5e94\u51e0\u4e2a\u6587\u4ef6\uff08\u51e0\u4e4e\u90fd\u4f20 1\uff09\u3001\u6700\u5927\u5b57\u8282\u6570\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">DiskLruCache mDiskLruCache = null;\ntry {\n    File cacheDir = getDiskCacheDir(context, \"bitmap\");\n    if (!cacheDir.exists()) {\n        cacheDir.mkdirs();\n    }\n    mDiskLruCache = DiskLruCache.open(cacheDir, 1001, 1, 10 * 1024 * 1024);\n} catch (IOException e) {\n    e.printStackTrace();\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u7f13\u5b58\u8def\u5f84\uff1a\u5916\u7f6e\u5b58\u50a8\u53ef\u7528\u5219\u7528 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">getExternalCacheDir()<\/code>\uff0c\u5426\u5219\u5185\u90e8 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">getCacheDir()<\/code>\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public File getDiskCacheDir(Context context, String uniqueName) {\n    String cachePath;\n    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())\n            || !Environment.isExternalStorageRemovable()) {\n        cachePath = context.getExternalCacheDir().getPath();\n    } else {\n        cachePath = context.getCacheDir().getPath();\n    }\n    return new File(cachePath + File.separator + uniqueName);\n}\n\npublic int getAppVersion(Context context) {\n    try {\n        PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);\n        return info.versionCode;\n    } catch (NameNotFoundException e) {\n        e.printStackTrace();\n    }\n    return 1;\n}<\/code><\/pre>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e09\u3001\u5199\u5165\u4e0e\u8bfb\u53d6<\/span><\/h2>\n<p style=\"margin: 1em 0px;\">URL \u91cc\u5e38\u6709\u4e0d\u80fd\u5f53\u6587\u4ef6\u540d\u7684\u5b57\u7b26\uff0ckey \u5148\u505a MD5\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public String hashKeyForDisk(String key) {\n    String cacheKey;\n    try {\n        final MessageDigest mDigest = MessageDigest.getInstance(\"MD5\");\n        mDigest.update(key.getBytes());\n        cacheKey = bytesToHexString(mDigest.digest());\n    } catch (NoSuchAlgorithmException e) {\n        cacheKey = String.valueOf(key.hashCode());\n    }\n    return cacheKey;\n}\n\nprivate String bytesToHexString(byte[] bytes) {\n    StringBuilder sb = new StringBuilder();\n    for (int i = 0; i &lt; bytes.length; i++) {\n        String hex = Integer.toHexString(0xFF &amp; bytes[i]);\n        if (hex.length() == 1) {\n            sb.append('0');\n        }\n        sb.append(hex);\n    }\n    return sb.toString();\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5b8c\u6574\u5199\u5165\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">edit(key)<\/code> \u2192 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">newOutputStream(0)<\/code> \u628a\u7f51\u7edc\u56fe\u5199\u8fdb\u53bb \u2192 \u6210\u529f <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">commit()<\/code>\uff0c\u5931\u8d25 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">abort()<\/code>\uff0c\u6700\u540e <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">flush()<\/code>\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">new Thread(new Runnable() {\n    @Override\n    public void run() {\n        try {\n            String imageUrl = \"http:\/\/img.my.csdn.net\/uploads\/201309\/01\/1378037235_7476.jpg\";\n            String key = hashKeyForDisk(imageUrl);\n            DiskLruCache.Editor editor = mDiskLruCache.edit(key);\n            if (editor != null) {\n                OutputStream outputStream = editor.newOutputStream(0);\n                if (downloadUrlToStream(imageUrl, outputStream)) {\n                    editor.commit();\n                } else {\n                    editor.abort();\n                }\n            }\n            mDiskLruCache.flush();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}).start();<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u8bfb\u53d6\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">get(key)<\/code> \u62ff\u5230 Snapshot\uff0c\u518d <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">decodeStream<\/code>\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 10px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 10px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">try {\n    String imageUrl = \"http:\/\/img.my.csdn.net\/uploads\/201309\/01\/1378037235_7476.jpg\";\n    String key = hashKeyForDisk(imageUrl);\n    DiskLruCache.Snapshot snapShot = mDiskLruCache.get(key);\n    if (snapShot != null) {\n        InputStream is = snapShot.getInputStream(0);\n        Bitmap bitmap = BitmapFactory.decodeStream(is);\n        mImage.setImageBitmap(bitmap);\n    }\n} catch (IOException e) {\n    e.printStackTrace();\n}<\/code><\/pre>\n<table style=\"border-collapse: collapse; margin: 1.4em auto; max-width: 100%; table-layout: fixed; text-align: left; overflow: auto; display: table; overflow-wrap: break-word; word-break: break-all;\" width=\"817\">\n<thead>\n<tr>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u5c42<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u5b9e\u73b0<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u8981\u70b9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u5185\u5b58<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">LruCache&lt;String, Bitmap&gt;<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">maxMemory\/8\uff0csizeOf \u7528 getByteCount<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u78c1\u76d8<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">DiskLruCache<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">URL \u5148 MD5\uff1bcommit \/ abort \/ flush<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u7f51\u7edc<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u4e0b\u8f7d\u5199\u5165 OutputStream<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u524d\u4e24\u5c42\u90fd miss \u624d\u8d70<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 1em 0px;\">\u6ce8\uff1a<a href=\"http:\/\/blog.csdn.net\/guolin_blog\/article\/details\/28863651\">Android DiskLruCache\u5b8c\u5168\u89e3\u6790\uff0c\u786c\u76d8\u7f13\u5b58\u7684\u6700\u4f73\u65b9\u6848<\/a> \u5bf9\u6587\u4ef6\u7f13\u5b58\u6709\u66f4\u8be6\u7ec6\u4ecb\u7ecd\uff0c\u53ef\u4ee5\u53c2\u8003\u5b66\u4e60\u3002<\/p>\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid #ef7060; color: #6a737d; padding: 10px 10px 10px 20px; background: #fff9f9;\">\n<p style=\"margin: 1em 0px;\"><strong>\u4e00\u53e5\u8bdd\u603b\u7ed3\uff1a\u5148 LruCache \u518d DiskLruCache\uff0c\u90fd\u6ca1\u6709\u624d\u4e0b\u8f7d\uff1b\u78c1\u76d8 key \u7528 MD5\uff0c\u5199\u5165\u7528 commit\/abort\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 Android\u52a0\u8f7d\u7f51\u7edc\u56fe\u7247 \u4e00\u7ae0\u91cc\uff0c\u6eda\u52a8\u5217\u8868\u4f1a\u53cd\u590d\u89e6\u53d1\u5f02\u6b65\u4efb\u52a1\u91cd\u65b0\u4e0b\u8f7d\uff0c\u65e2\u8d39\u6d41\u91cf\u4f53\u9a8c\u4e5f\u5dee\u3002\u663e\u793a\u524d\u5148\u67e5\u7f13\u5b58\uff1a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[66,202],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/964"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=964"}],"version-history":[{"count":3,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/964\/revisions"}],"predecessor-version":[{"id":1409,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/964\/revisions\/1409"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}