{"id":16282,"date":"2026-03-13T10:01:18","date_gmt":"2026-03-13T02:01:18","guid":{"rendered":"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282"},"modified":"2026-03-16T17:13:52","modified_gmt":"2026-03-16T09:13:52","slug":"%e4%b8%89%e3%80%81compose%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282","title":{"rendered":"\u4e09\u3001Compose\u72b6\u6001\u7ba1\u7406"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_16 counter-hierarchy counter-decimal ez-toc-grey\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" style=\"display: none;\"><i class=\"ez-toc-glyphicon ez-toc-icon-toggle\"><\/i><\/a><\/span><\/div>\n<nav><ul class=\"ez-toc-list ez-toc-list-level-1\"><li class=\"ez-toc-page-1 ez-toc-heading-level-1\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%80%E3%80%81%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86%E7%9F%A5%E8%AF%86%E6%A1%86%E6%9E%B6\" title=\"\u4e00\u3001\u72b6\u6001\u7ba1\u7406\u77e5\u8bc6\u6846\u67b6\">\u4e00\u3001\u72b6\u6001\u7ba1\u7406\u77e5\u8bc6\u6846\u67b6<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%F0%9F%93%9A_%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9\" title=\"\ud83d\udcda \u72b6\u6001\u7ba1\u7406\u6838\u5fc3\u77e5\u8bc6\u70b9\">\ud83d\udcda \u72b6\u6001\u7ba1\u7406\u6838\u5fc3\u77e5\u8bc6\u70b9<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%F0%9F%92%A1_%E6%A0%B8%E5%BF%83%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE\" title=\"\ud83d\udca1 \u6838\u5fc3\u601d\u7ef4\u5bfc\u56fe\">\ud83d\udca1 \u6838\u5fc3\u601d\u7ef4\u5bfc\u56fe<\/a><\/li><\/ul><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-1\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%BA%8C%E3%80%81Compose_%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86_API_%E5%AE%8C%E5%85%A8%E6%80%BB%E7%BB%93\" title=\"\u4e8c\u3001Compose \u72b6\u6001\u7ba1\u7406 API \u5b8c\u5168\u603b\u7ed3\">\u4e8c\u3001Compose \u72b6\u6001\u7ba1\u7406 API \u5b8c\u5168\u603b\u7ed3<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%80%E3%80%81%E6%A0%B8%E5%BF%83%E7%8A%B6%E6%80%81%E5%88%9B%E5%BB%BA_API\" title=\"\u4e00\u3001\u6838\u5fc3\u72b6\u6001\u521b\u5efa API\">\u4e00\u3001\u6838\u5fc3\u72b6\u6001\u521b\u5efa API<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_mutableStateOf_%E7%B3%BB%E5%88%97\" title=\"1. mutableStateOf \u7cfb\u5217\">1. mutableStateOf \u7cfb\u5217<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-7\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#2_mutableStateOf_%E7%9A%84%E5%87%A0%E7%A7%8D%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F\" title=\"2. mutableStateOf \u7684\u51e0\u79cd\u4f7f\u7528\u65b9\u5f0f\">2. mutableStateOf \u7684\u51e0\u79cd\u4f7f\u7528\u65b9\u5f0f<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-8\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%BA%8C%E3%80%81%E7%8A%B6%E6%80%81%E4%BF%9D%E6%8C%81_API\" title=\"\u4e8c\u3001\u72b6\u6001\u4fdd\u6301 API\">\u4e8c\u3001\u72b6\u6001\u4fdd\u6301 API<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-9\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_remember_-_%E9%87%8D%E7%BB%84%E5%90%8E%E4%BF%9D%E6%8C%81\" title=\"1. remember &#8211; \u91cd\u7ec4\u540e\u4fdd\u6301\">1. remember &#8211; \u91cd\u7ec4\u540e\u4fdd\u6301<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-10\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#2_rememberSaveable_-_%E9%85%8D%E7%BD%AE%E5%8F%98%E6%9B%B4%E5%90%8E%E4%BF%9D%E6%8C%81\" title=\"2. rememberSaveable &#8211; \u914d\u7f6e\u53d8\u66f4\u540e\u4fdd\u6301\">2. rememberSaveable &#8211; \u914d\u7f6e\u53d8\u66f4\u540e\u4fdd\u6301<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-11\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%89%E3%80%81%E7%8A%B6%E6%80%81%E6%B4%BE%E7%94%9F_API\" title=\"\u4e09\u3001\u72b6\u6001\u6d3e\u751f API\">\u4e09\u3001\u72b6\u6001\u6d3e\u751f API<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-12\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_derivedStateOf_-_%E6%B4%BE%E7%94%9F%E7%8A%B6%E6%80%81\" title=\"1. derivedStateOf &#8211; \u6d3e\u751f\u72b6\u6001\">1. derivedStateOf &#8211; \u6d3e\u751f\u72b6\u6001<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-13\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E5%9B%9B%E3%80%81%E7%8A%B6%E6%80%81%E6%94%B6%E9%9B%86_API%EF%BC%88%E4%B8%8E%E5%85%B6%E4%BB%96%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90%EF%BC%89\" title=\"\u56db\u3001\u72b6\u6001\u6536\u96c6 API\uff08\u4e0e\u5176\u4ed6\u6846\u67b6\u96c6\u6210\uff09\">\u56db\u3001\u72b6\u6001\u6536\u96c6 API\uff08\u4e0e\u5176\u4ed6\u6846\u67b6\u96c6\u6210\uff09<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-14\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_Flow_%E9%9B%86%E6%88%90\" title=\"1. Flow \u96c6\u6210\">1. Flow \u96c6\u6210<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-15\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#2_LiveData_%E9%9B%86%E6%88%90\" title=\"2. LiveData \u96c6\u6210\">2. LiveData \u96c6\u6210<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-16\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#3_RxJava_%E9%9B%86%E6%88%90\" title=\"3. RxJava \u96c6\u6210\">3. RxJava \u96c6\u6210<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-17\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%BA%94%E3%80%81%E9%9B%86%E5%90%88%E7%8A%B6%E6%80%81_API\" title=\"\u4e94\u3001\u96c6\u5408\u72b6\u6001 API\">\u4e94\u3001\u96c6\u5408\u72b6\u6001 API<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-18\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_mutableStateListOf\" title=\"1. mutableStateListOf\">1. mutableStateListOf<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-19\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#2_mutableStateMapOf\" title=\"2. mutableStateMapOf\">2. mutableStateMapOf<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-20\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E5%85%AD%E3%80%81%E6%AF%94%E8%BE%83%E8%A1%A8%E6%A0%BC\" title=\"\u516d\u3001\u6bd4\u8f83\u8868\u683c\">\u516d\u3001\u6bd4\u8f83\u8868\u683c<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-21\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%83%E3%80%81%E9%80%89%E6%8B%A9%E6%8C%87%E5%8D%97\" title=\"\u4e03\u3001\u9009\u62e9\u6307\u5357\">\u4e03\u3001\u9009\u62e9\u6307\u5357<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-22\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E6%AD%A3%E7%A1%AE%E7%9A%84_API%EF%BC%9A\" title=\"\u5982\u4f55\u9009\u62e9\u6b63\u786e\u7684 API\uff1a\">\u5982\u4f55\u9009\u62e9\u6b63\u786e\u7684 API\uff1a<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-23\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E5%85%AB%E3%80%81%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%93\" title=\"\u516b\u3001\u6700\u4f73\u5b9e\u8df5\u603b\u7ed3\">\u516b\u3001\u6700\u4f73\u5b9e\u8df5\u603b\u7ed3<\/a><\/li><\/ul><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-1\"><a class=\"ez-toc-link ez-toc-heading-24\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%89%E3%80%81mutableStateOf_%E7%B1%BB%E5%9E%8B_vs_%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B\" title=\"\u4e09\u3001mutableStateOf \u7c7b\u578b vs \u57fa\u672c\u6570\u636e\u7c7b\u578b\">\u4e09\u3001mutableStateOf \u7c7b\u578b vs \u57fa\u672c\u6570\u636e\u7c7b\u578b<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-25\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%80%E3%80%81%E6%9C%AC%E8%B4%A8%E5%8C%BA%E5%88%AB\" title=\"\u4e00\u3001\u672c\u8d28\u533a\u522b\">\u4e00\u3001\u672c\u8d28\u533a\u522b<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-26\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%BA%8C%E3%80%81%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84%E5%AF%B9%E6%AF%94\" title=\"\u4e8c\u3001\u5185\u5b58\u7ed3\u6784\u5bf9\u6bd4\">\u4e8c\u3001\u5185\u5b58\u7ed3\u6784\u5bf9\u6bd4<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-27\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E6%99%AE%E9%80%9A%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B\" title=\"\u666e\u901a\u6570\u636e\u7c7b\u578b\">\u666e\u901a\u6570\u636e\u7c7b\u578b<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-28\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#MutableState_%E7%B1%BB%E5%9E%8B\" title=\"MutableState \u7c7b\u578b\">MutableState \u7c7b\u578b<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-29\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%89%E3%80%81%E8%AF%A6%E7%BB%86%E5%AF%B9%E6%AF%94%E8%A1%A8%E6%A0%BC\" title=\"\u4e09\u3001\u8be6\u7ec6\u5bf9\u6bd4\u8868\u683c\">\u4e09\u3001\u8be6\u7ec6\u5bf9\u6bd4\u8868\u683c<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-30\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E5%9B%9B%E3%80%81%E4%BB%A3%E7%A0%81%E5%AF%B9%E6%AF%94%E7%A4%BA%E4%BE%8B\" title=\"\u56db\u3001\u4ee3\u7801\u5bf9\u6bd4\u793a\u4f8b\">\u56db\u3001\u4ee3\u7801\u5bf9\u6bd4\u793a\u4f8b<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-31\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#1_%E6%9B%B4%E6%96%B0%E6%96%B9%E5%BC%8F\" title=\"1. \u66f4\u65b0\u65b9\u5f0f\">1. \u66f4\u65b0\u65b9\u5f0f<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-32\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%BA%94%E3%80%81%E6%80%BB%E7%BB%93%EF%BC%9A%E5%85%B3%E9%94%AE%E5%8C%BA%E5%88%AB\" title=\"\u4e94\u3001\u603b\u7ed3\uff1a\u5173\u952e\u533a\u522b\">\u4e94\u3001\u603b\u7ed3\uff1a\u5173\u952e\u533a\u522b<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-33\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E6%A0%B8%E5%BF%83%E8%A6%81%E7%82%B9\" title=\"\u6838\u5fc3\u8981\u70b9\">\u6838\u5fc3\u8981\u70b9<\/a><\/li><\/ul><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-1\"><a class=\"ez-toc-link ez-toc-heading-34\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=16282\/#%E4%B8%89%E3%80%81State%E6%8E%A5%E5%8F%A3\" title=\"\u4e09\u3001State\u63a5\u53e3\">\u4e09\u3001State\u63a5\u53e3<\/a><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E4%B8%80%E3%80%81%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86%E7%9F%A5%E8%AF%86%E6%A1%86%E6%9E%B6\"><\/span>\u4e00\u3001\u72b6\u6001\u7ba1\u7406\u77e5\u8bc6\u6846\u67b6<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h3><span class=\"ez-toc-section\" id=\"%F0%9F%93%9A_%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9\"><\/span>\ud83d\udcda \u72b6\u6001\u7ba1\u7406\u6838\u5fc3\u77e5\u8bc6\u70b9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">\u77e5\u8bc6\u70b9<\/th>\n<th style=\"text-align: left;\">\u6838\u5fc3\u5185\u5bb9<\/th>\n<th style=\"text-align: left;\">\u5173\u952eAPI\/\u6982\u5ff5<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>\u72b6\u6001\u4e0e\u7ec4\u5408<\/strong><\/td>\n<td style=\"text-align: left;\">Compose\u662f\u58f0\u660e\u5f0fUI\uff0c\u66f4\u65b0UI\u7684\u552f\u4e00\u65b9\u5f0f\u662f\u4f7f\u7528\u65b0\u53c2\u6570\u8c03\u7528\u53ef\u7ec4\u5408\u9879\u3002\u72b6\u6001\u53d8\u5316\u89e6\u53d1<strong>\u91cd\u7ec4<\/strong>\u3002<\/td>\n<td style=\"text-align: left;\"><code>\u91cd\u7ec4<\/code>\u3001<code>\u53ef\u7ec4\u5408\u51fd\u6570<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u53ef\u7ec4\u5408\u9879\u4e2d\u7684\u72b6\u6001<\/strong><\/td>\n<td style=\"text-align: left;\">\u4f7f\u7528<code>remember<\/code>\u5728<strong>\u91cd\u7ec4\u540e<\/strong>\u4fdd\u6301\u72b6\u6001\u3002<code>mutableStateOf<\/code>\u521b\u5efa\u53ef\u89c2\u5bdf\u7684<code>MutableState<\/code>\uff0c\u5176<code>value<\/code>\u53d8\u5316\u4f1a\u89e6\u53d1\u8bfb\u53d6\u5b83\u7684\u91cd\u7ec4\u3002<\/td>\n<td style=\"text-align: left;\"><code>remember { mutableStateOf(...) }<\/code>\u3001<code>by<\/code>\u59d4\u6258\u3001<code>rememberSaveable<\/code>\uff08\u5904\u7406\u914d\u7f6e\u53d8\u66f4\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5176\u4ed6\u72b6\u6001\u7c7b\u578b\u652f\u6301<\/strong><\/td>\n<td style=\"text-align: left;\">\u5c06\u5176\u4ed6\u53ef\u89c2\u5bdf\u7c7b\u578b\uff08\u5982<code>Flow<\/code>\u3001<code>LiveData<\/code>\uff09\u8f6c\u6362\u4e3a<code>State<\/code>\uff0c\u4ee5\u4fbf\u5728Compose\u4e2d\u4f7f\u7528\u3002<\/td>\n<td style=\"text-align: left;\"><code>collectAsStateWithLifecycle()<\/code>\uff08\u63a8\u8350\u7528\u4e8eAndroid\uff09\u3001<code>collectAsState<\/code>\u3001<code>observeAsState()<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u6709\u72b6\u6001 vs \u65e0\u72b6\u6001<\/strong><\/td>\n<td style=\"text-align: left;\">\u6709\u72b6\u6001\uff1a\u5185\u90e8\u4fdd\u6301\u72b6\u6001\uff08\u65b9\u4fbf\u4f46\u4e0d\u7075\u6d3b\uff09\u3002\u65e0\u72b6\u6001\uff1a\u4e0d\u4fdd\u6301\u4efb\u4f55\u72b6\u6001\uff08\u66f4\u53ef\u590d\u7528\u3001\u6613\u6d4b\u8bd5\uff09\u3002<\/td>\n<td style=\"text-align: left;\">\u8bbe\u8ba1\u53ef\u7ec4\u5408\u9879\u65f6\uff0c\u4f18\u5148\u8003\u8651\u65e0\u72b6\u6001\u3002<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u72b6\u6001\u63d0\u5347<\/strong><\/td>\n<td style=\"text-align: left;\">\u5c06\u72b6\u6001\u79fb\u81f3\u8c03\u7528\u65b9\uff0c\u4f7f\u53ef\u7ec4\u5408\u9879\u65e0\u72b6\u6001\u7684\u6a21\u5f0f\u3002\u901a\u5e38\u66ff\u6362\u4e3a<code>value<\/code>\u548c<code>onValueChange<\/code>\u4e24\u4e2a\u53c2\u6570\u3002<\/td>\n<td style=\"text-align: left;\"><strong>\u5355\u5411\u6570\u636e\u6d41<\/strong>\uff1a\u72b6\u6001\u5411\u4e0b\u6d41\u52a8\uff0c\u4e8b\u4ef6\u5411\u4e0a\u6d41\u52a8\u3002<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u72b6\u6001\u6062\u590d<\/strong><\/td>\n<td style=\"text-align: left;\">\u5728\u914d\u7f6e\u53d8\u66f4\u6216\u8fdb\u7a0b\u91cd\u5efa\u540e\u4fdd\u7559\u72b6\u6001\u3002<code>rememberSaveable<\/code>\u901a\u8fc7<code>Bundle<\/code>\u81ea\u52a8\u4fdd\u5b58\u652f\u6301\u7684\u7c7b\u578b\uff0c\u6216\u901a\u8fc7<code>Saver<\/code>\uff08\u5982<code>mapSaver<\/code>\u3001<code>listSaver<\/code>\uff09\u4fdd\u5b58\u81ea\u5b9a\u4e49\u5bf9\u8c61\u3002<\/td>\n<td style=\"text-align: left;\"><code>rememberSaveable<\/code>\u3001<code>@Parcelize<\/code>\u3001<code>MapSaver<\/code>\u3001<code>ListSaver<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5e26\u952e\u7684remember<\/strong><\/td>\n<td style=\"text-align: left;\"><code>remember<\/code>\u63a5\u53d7<code>key<\/code>\u53c2\u6570\uff0c\u5f53<code>key<\/code>\u53d8\u5316\u65f6\uff0c\u7f13\u5b58\u5931\u6548\u5e76\u91cd\u65b0\u8ba1\u7b97\u3002\u7528\u4e8e\u63a7\u5236\u6210\u672c\u9ad8\u6602\u5bf9\u8c61\u7684\u751f\u547d\u5468\u671f\u3002<\/td>\n<td style=\"text-align: left;\"><code>remember(key1 = someValue) { ... }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u72b6\u6001\u5bb9\u5668<\/strong><\/td>\n<td style=\"text-align: left;\">\u5f53\u72b6\u6001\u903b\u8f91\u53d8\u590d\u6742\u65f6\uff0c\u5e94\u5c06\u903b\u8f91\u548c\u72b6\u6001\u4e8b\u52a1\u59d4\u6d3e\u7ed9\u4e13\u95e8\u7684<strong>\u72b6\u6001\u5bb9\u5668\u7c7b<\/strong>\uff0c\u800c\u4e0d\u662f\u5199\u5728\u53ef\u7ec4\u5408\u51fd\u6570\u4e2d\u3002<\/td>\n<td style=\"text-align: left;\">\u72b6\u6001\u5bb9\u5668\u3001ViewModel\u901a\u5e38\u662f\u72b6\u6001\u5bb9\u5668\u7684\u5b9e\u73b0\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"%F0%9F%92%A1_%E6%A0%B8%E5%BF%83%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE\"><\/span>\ud83d\udca1 \u6838\u5fc3\u601d\u7ef4\u5bfc\u56fe<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u6587\u6863\u4e2d\u7684\u72b6\u6001\u7ba1\u7406\u601d\u60f3\u53ef\u4ee5\u6982\u62ec\u4e3a\u4ee5\u4e0b\u6d41\u7a0b\uff1a<\/p>\n<ol>\n<li><strong>\u5b9a\u4e49\u53ef\u89c2\u5bdf\u72b6\u6001<\/strong>\uff1a\u4f7f\u7528 <code>mutableStateOf<\/code> \u521b\u5efa\u3002<\/li>\n<li><strong>\u5728\u7ec4\u5408\u4e2d\u4fdd\u6301<\/strong>\uff1a\u4f7f\u7528 <code>remember<\/code> \u6216 <code>rememberSaveable<\/code> \u5305\u88f9\u3002<\/li>\n<li><strong>\u901a\u8fc7UI\u5c55\u793a<\/strong>\uff1a\u5728\u53ef\u7ec4\u5408\u9879\u4e2d\u8bfb\u53d6 <code>State.value<\/code>\uff0c\u7cfb\u7edf\u81ea\u52a8\u8ba2\u9605\u3002<\/li>\n<li><strong>\u901a\u8fc7\u4e8b\u4ef6\u66f4\u65b0<\/strong>\uff1aUI\u89e6\u53d1\u4e8b\u4ef6\uff08\u5982 <code>onValueChange<\/code>\uff09\uff0c\u66f4\u65b0\u72b6\u6001\u503c\u3002<\/li>\n<li><strong>\u89e6\u53d1\u91cd\u7ec4<\/strong>\uff1a\u72b6\u6001\u503c\u6539\u53d8\uff0cCompose \u91cd\u65b0\u6267\u884c\u8bfb\u53d6\u8be5\u72b6\u6001\u7684\u4ee3\u7801\u5757\u3002<\/li>\n<li><strong>\u63d0\u5347\u5173\u952e\u72b6\u6001<\/strong>\uff1a\u5c06\u9700\u8981\u5171\u4eab\u6216\u63a7\u5236\u7684\u201c\u72b6\u6001\u201d\u548c\u201c\u4e8b\u4ef6\u201d\u63d0\u5347\u5230\u7236\u7ea7\uff0c\u5b9e\u73b0\u65e0\u72b6\u6001\u3001\u53ef\u590d\u7528\u7684\u7ec4\u4ef6\u3002<\/li>\n<\/ol>\n<h1><span class=\"ez-toc-section\" id=\"%E4%BA%8C%E3%80%81Compose_%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86_API_%E5%AE%8C%E5%85%A8%E6%80%BB%E7%BB%93\"><\/span>\u4e8c\u3001Compose \u72b6\u6001\u7ba1\u7406 API \u5b8c\u5168\u603b\u7ed3<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h3><span class=\"ez-toc-section\" id=\"%E4%B8%80%E3%80%81%E6%A0%B8%E5%BF%83%E7%8A%B6%E6%80%81%E5%88%9B%E5%BB%BA_API\"><\/span>\u4e00\u3001<strong>\u6838\u5fc3\u72b6\u6001\u521b\u5efa API<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_mutableStateOf_%E7%B3%BB%E5%88%97\"><\/span>1. <strong><code>mutableStateOf<\/code> \u7cfb\u5217<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u57fa\u672c\u7c7b\u578b\nval state = mutableStateOf(0)              \/\/ State&lt;Int&gt;\nval state = mutableStateOf(&quot;&quot;)              \/\/ State&lt;String&gt;\nval state = mutableStateOf(false)           \/\/ State&lt;Boolean&gt;\n\n\/\/ \u4e13\u7528\u7c7b\u578b\uff08\u907f\u514d\u88c5\u7bb1\uff0c\u6027\u80fd\u66f4\u597d\uff09\nval state = mutableIntStateOf(0)            \/\/ MutableIntState\nval state = mutableLongStateOf(0L)          \/\/ MutableLongState  \nval state = mutableFloatStateOf(0f)         \/\/ MutableFloatState\nval state = mutableDoubleStateOf(0.0)       \/\/ MutableDoubleState\nval state = mutableBooleanStateOf(false)    \/\/ MutableBooleanState\n\n\/\/ \u96c6\u5408\u7c7b\u578b\nval list = mutableStateListOf&lt;String&gt;()     \/\/ SnapshotStateList&lt;String&gt;\nval map = mutableStateMapOf&lt;String, Int&gt;()  \/\/ SnapshotStateMap&lt;String, Int&gt;<\/code><\/pre>\n<p>mutableStateOf \u53ef\u4ee5\u5305\u88c5\u4efb\u4f55\u7c7b\u578b\uff0c\u5305\u62ec<strong>\u51fd\u6570<\/strong>\uff01<br \/>\n<code>var action by remember { mutableStateOf({ println(&quot;\u521d\u59cb\u52a8\u4f5c&quot;) }) }<\/code><\/p>\n<h4><span class=\"ez-toc-section\" id=\"2_mutableStateOf_%E7%9A%84%E5%87%A0%E7%A7%8D%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F\"><\/span>2. <strong><code>mutableStateOf<\/code> \u7684\u51e0\u79cd\u4f7f\u7528\u65b9\u5f0f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u65b9\u5f0f1\uff1a\u76f4\u63a5\u8bbf\u95ee .value\nval countState = remember { mutableStateOf(0) }\nText(&quot;\u8ba1\u6570: ${countState.value}&quot;)\nButton(onClick = { countState.value++ })\n\n\/\/ \u65b9\u5f0f2\uff1aby \u59d4\u6258\uff08\u6700\u5e38\u7528\uff09\nvar count by remember { mutableStateOf(0) }\nText(&quot;\u8ba1\u6570: $count&quot;)\nButton(onClick = { count++ })<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BA%8C%E3%80%81%E7%8A%B6%E6%80%81%E4%BF%9D%E6%8C%81_API\"><\/span>\u4e8c\u3001<strong>\u72b6\u6001\u4fdd\u6301 API<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4>1. <strong><code>remember<\/code> - \u91cd\u7ec4\u540e\u4fdd\u6301<\/strong><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u57fa\u672c\u7528\u6cd5\nvar count by remember { mutableStateOf(0) }\n\n\/\/ \u5e26 key \u7684 remember\uff08key \u53d8\u5316\u65f6\u91cd\u65b0\u8ba1\u7b97\uff09\nval expensiveObject = remember(key1 = userId, key2 = filter) {\n    ExpensiveObject(userId, filter)  \/\/ userId \u6216 filter \u53d8\u5316\u65f6\u91cd\u65b0\u521b\u5efa\n}\n\n\/\/ \u8bb0\u4f4f\u8ba1\u7b97\u7ed3\u679c\nval filteredList = remember(list, filter) {\n    list.filter { it.contains(filter) }  \/\/ list \u6216 filter \u53d8\u5316\u65f6\u91cd\u65b0\u8ba1\u7b97\n}<\/code><\/pre>\n<h4>2. <strong><code>rememberSaveable<\/code> - \u914d\u7f6e\u53d8\u66f4\u540e\u4fdd\u6301<\/strong><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u57fa\u672c\u7c7b\u578b\u81ea\u52a8\u4fdd\u5b58\nvar text by rememberSaveable { mutableStateOf(&quot;&quot;) }\nvar count by rememberSaveable { mutableIntStateOf(0) }\n\n\/\/ \u81ea\u5b9a\u4e49\u5bf9\u8c61\u9700\u8981 Saver\n@Parcelize\ndata class User(val name: String, val age: Int) : Parcelable\nvar user by rememberSaveable { mutableStateOf(User(&quot;&quot;, 0)) }\n\n\/\/ \u4f7f\u7528\u81ea\u5b9a\u4e49 Saver\nvar tasks by rememberSaveable(stateSaver = TaskListSaver) {\n    mutableStateOf(emptyList&lt;Task&gt;())\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%B8%89%E3%80%81%E7%8A%B6%E6%80%81%E6%B4%BE%E7%94%9F_API\"><\/span>\u4e09\u3001<strong>\u72b6\u6001\u6d3e\u751f API<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4>1. <strong><code>derivedStateOf<\/code> - \u6d3e\u751f\u72b6\u6001<\/strong><\/h4>\n<p>kotlin<\/p>\n<pre><code>var count by remember { mutableStateOf(0) }\n\n\/\/ \u57fa\u7840\u6d3e\u751f\nval isEven by remember {\n    derivedStateOf { count % 2 == 0 }\n}\n\n\/\/ \u590d\u6742\u6d3e\u751f\nval stats by remember {\n    derivedStateOf {\n        Stats(\n            total = items.size,\n            completed = items.count { it.completed },\n            active = items.count { !it.completed }\n        )\n    }\n}\n\n\/\/ \u9632\u6296\/\u8282\u6d41\u6548\u679c\nval debouncedQuery by remember {\n    derivedStateOf {\n        \/\/ \u53ea\u6709\u67e5\u8be2\u7a33\u5b9a 300ms \u540e\u624d\u66f4\u65b0\n        query.takeIf { it.isNotBlank() }\n    }\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E5%9B%9B%E3%80%81%E7%8A%B6%E6%80%81%E6%94%B6%E9%9B%86_API%EF%BC%88%E4%B8%8E%E5%85%B6%E4%BB%96%E6%A1%86%E6%9E%B6%E9%9B%86%E6%88%90%EF%BC%89\"><\/span>\u56db\u3001<strong>\u72b6\u6001\u6536\u96c6 API\uff08\u4e0e\u5176\u4ed6\u6846\u67b6\u96c6\u6210\uff09<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_Flow_%E9%9B%86%E6%88%90\"><\/span>1. <strong>Flow \u96c6\u6210<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u751f\u547d\u5468\u671f\u611f\u77e5\u7684 Flow \u6536\u96c6\uff08\u63a8\u8350 Android \u4f7f\u7528\uff09\nval uiState by viewModel.uiState.collectAsStateWithLifecycle()\n\n\/\/ \u666e\u901a Flow \u6536\u96c6\nval data by flow.collectAsState(initial = null)\n\n\/\/ StateFlow \u8f6c\u6362\nval state by stateFlow.collectAsState()<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"2_LiveData_%E9%9B%86%E6%88%90\"><\/span>2. <strong>LiveData \u96c6\u6210<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u9700\u8981\u6dfb\u52a0\u4f9d\u8d56\uff1aruntime-livedata\nval liveData = MutableLiveData(0)\nval count by liveData.observeAsState(initial = 0)<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"3_RxJava_%E9%9B%86%E6%88%90\"><\/span>3. <strong>RxJava \u96c6\u6210<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u9700\u8981\u6dfb\u52a0\u76f8\u5e94\u4f9d\u8d56\nval observable = Observable.just(1)\nval value by observable.subscribeAsState(initial = 0)<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BA%94%E3%80%81%E9%9B%86%E5%90%88%E7%8A%B6%E6%80%81_API\"><\/span>\u4e94\u3001<strong>\u96c6\u5408\u72b6\u6001 API<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_mutableStateListOf\"><\/span>1. <strong><code>mutableStateListOf<\/code><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>val items = remember { mutableStateListOf&lt;String&gt;() }\n\n\/\/ \u652f\u6301\u6240\u6709 List \u64cd\u4f5c\nitems.add(&quot;\u65b0\u9879\u76ee&quot;)\nitems.removeAt(0)\nitems[0] = &quot;\u66f4\u65b0&quot;\nitems.clear()\n\n\/\/ \u89e6\u53d1\u91cd\u7ec4\u7684\u65b9\u6cd5\nitems.addAll(listOf(&quot;a&quot;, &quot;b&quot;))\nitems.removeAll { it.startsWith(&quot;a&quot;) }\nitems.retainAll { it.length &gt; 3 }<\/code><\/pre>\n<h4><span class=\"ez-toc-section\" id=\"2_mutableStateMapOf\"><\/span>2. <strong><code>mutableStateMapOf<\/code><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>val map = remember { mutableStateMapOf&lt;String, Int&gt;() }\n\n\/\/ \u652f\u6301\u6240\u6709 Map \u64cd\u4f5c\nmap[&quot;key&quot;] = 1\nmap.put(&quot;another&quot;, 2)\nmap.remove(&quot;key&quot;)\nmap.clear()<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E5%85%AD%E3%80%81%E6%AF%94%E8%BE%83%E8%A1%A8%E6%A0%BC\"><\/span>\u516d\u3001<strong>\u6bd4\u8f83\u8868\u683c<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">API<\/th>\n<th style=\"text-align: left;\">\u4f5c\u7528\u8303\u56f4<\/th>\n<th style=\"text-align: left;\">\u751f\u547d\u5468\u671f<\/th>\n<th style=\"text-align: left;\">\u4f7f\u7528\u573a\u666f<\/th>\n<th style=\"text-align: left;\">\u793a\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong><code>mutableStateOf<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u5355\u4e2a\u503c<\/td>\n<td style=\"text-align: left;\">\u8ddf\u968f remember<\/td>\n<td style=\"text-align: left;\">\u57fa\u672c\u72b6\u6001<\/td>\n<td style=\"text-align: left;\"><code>var text by remember { mutableStateOf(&quot;&quot;) }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>mutableIntStateOf<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">Int \u503c<\/td>\n<td style=\"text-align: left;\">\u8ddf\u968f remember<\/td>\n<td style=\"text-align: left;\">Int \u72b6\u6001\uff08\u6027\u80fd\u4f18\u5316\uff09<\/td>\n<td style=\"text-align: left;\"><code>var count by remember { mutableIntStateOf(0) }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>mutableStateListOf<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u5217\u8868<\/td>\n<td style=\"text-align: left;\">\u8ddf\u968f remember<\/td>\n<td style=\"text-align: left;\">\u53ef\u53d8\u5217\u8868<\/td>\n<td style=\"text-align: left;\"><code>val list = remember { mutableStateListOf&lt;String&gt;() }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>mutableStateMapOf<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u6620\u5c04<\/td>\n<td style=\"text-align: left;\">\u8ddf\u968f remember<\/td>\n<td style=\"text-align: left;\">\u53ef\u53d8 Map<\/td>\n<td style=\"text-align: left;\"><code>val map = remember { mutableStateMapOf&lt;String, Int&gt;() }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>remember<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u4efb\u4f55\u5bf9\u8c61<\/td>\n<td style=\"text-align: left;\">\u91cd\u7ec4\u540e<\/td>\n<td style=\"text-align: left;\">\u4fdd\u6301\u5bf9\u8c61<\/td>\n<td style=\"text-align: left;\"><code>val obj = remember { ExpensiveObject() }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>rememberSaveable<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u4efb\u4f55\u5bf9\u8c61<\/td>\n<td style=\"text-align: left;\">\u914d\u7f6e\u53d8\u66f4\u540e<\/td>\n<td style=\"text-align: left;\">\u6062\u590d\u72b6\u6001<\/td>\n<td style=\"text-align: left;\"><code>var text by rememberSaveable { mutableStateOf(&quot;&quot;) }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>derivedStateOf<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">\u6d3e\u751f\u503c<\/td>\n<td style=\"text-align: left;\">\u4f9d\u8d56\u53d8\u5316\u65f6<\/td>\n<td style=\"text-align: left;\">\u8ba1\u7b97\u5c5e\u6027<\/td>\n<td style=\"text-align: left;\"><code>val isValid by remember { derivedStateOf { text.length &gt; 3 } }<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><code>collectAsState<\/code><\/strong><\/td>\n<td style=\"text-align: left;\">Flow<\/td>\n<td style=\"text-align: left;\">\u6536\u96c6\u671f\u95f4<\/td>\n<td style=\"text-align: left;\">Flow \u8f6c State<\/td>\n<td style=\"text-align: left;\"><code>val data by flow.collectAsState()<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"%E4%B8%83%E3%80%81%E9%80%89%E6%8B%A9%E6%8C%87%E5%8D%97\"><\/span>\u4e03\u3001<strong>\u9009\u62e9\u6307\u5357<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E6%AD%A3%E7%A1%AE%E7%9A%84_API%EF%BC%9A\"><\/span><strong>\u5982\u4f55\u9009\u62e9\u6b63\u786e\u7684 API\uff1a<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><strong>\u662f\u5426\u9700\u8981\u8de8\u91cd\u7ec4\u4fdd\u6301\uff1f<\/strong>\n<ul>\n<li>\u662f \u2192 <code>remember<\/code><\/li>\n<li>\u5426 \u2192 \u666e\u901a\u53d8\u91cf\uff08\u4e0d\u63a8\u8350\uff09\u6216\u53c2\u6570<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u662f\u5426\u9700\u8981\u8de8\u914d\u7f6e\u53d8\u66f4\u4fdd\u6301\uff1f<\/strong>\n<ul>\n<li>\u662f \u2192 <code>rememberSaveable<\/code><\/li>\n<li>\u5426 \u2192 <code>remember<\/code><\/li>\n<\/ul>\n<\/li>\n<li><strong>\u72b6\u6001\u7c7b\u578b\u662f\u4ec0\u4e48\uff1f<\/strong>\n<ul>\n<li>\u57fa\u672c\u7c7b\u578b \u2192 <code>mutableStateOf<\/code> \u6216\u4e13\u7528\u7c7b\u578b<\/li>\n<li>\u5217\u8868 \u2192 <code>mutableStateListOf<\/code><\/li>\n<li>Map \u2192 <code>mutableStateMapOf<\/code><\/li>\n<li>\u590d\u6742\u5bf9\u8c61 \u2192 <code>mutableStateOf<\/code> + <code>Saver<\/code><\/li>\n<\/ul>\n<\/li>\n<li><strong>\u662f\u5426\u4f9d\u8d56\u5176\u4ed6\u72b6\u6001\uff1f<\/strong>\n<ul>\n<li>\u662f \u2192 <code>derivedStateOf<\/code><\/li>\n<li>\u5426 \u2192 \u76f4\u63a5\u4f7f\u7528<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u6570\u636e\u6765\u6e90\uff1f<\/strong>\n<ul>\n<li>ViewModel\/Flow \u2192 <code>collectAsStateWithLifecycle<\/code><\/li>\n<li>LiveData \u2192 <code>observeAsState<\/code><\/li>\n<li>\u672c\u5730\u72b6\u6001 \u2192 <code>mutableStateOf<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"%E5%85%AB%E3%80%81%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%93\"><\/span>\u516b\u3001<strong>\u6700\u4f73\u5b9e\u8df5\u603b\u7ed3<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>kotlin<\/p>\n<pre><code>@Composable\nfun BestPracticesDemo() {\n    \/\/ \u2705 \u597d\uff1a\u4f7f\u7528\u4e13\u7528\u7c7b\u578b\u907f\u514d\u88c5\u7bb1\n    var count by remember { mutableIntStateOf(0) }\n\n    \/\/ \u2705 \u597d\uff1a\u9700\u8981\u8de8\u914d\u7f6e\u53d8\u66f4\u4f7f\u7528 rememberSaveable\n    var text by rememberSaveable { mutableStateOf(&quot;&quot;) }\n\n    \/\/ \u2705 \u597d\uff1a\u590d\u6742\u8ba1\u7b97\u4f7f\u7528 derivedStateOf\n    val processedData by remember(data) {\n        derivedStateOf { expensiveOperation(data) }\n    }\n\n    \/\/ \u2705 \u597d\uff1a\u5217\u8868\u4f7f\u7528 mutableStateListOf\n    val items = remember { mutableStateListOf&lt;String&gt;() }\n\n    \/\/ \u2705 \u597d\uff1a\u4f7f\u7528 key \u63a7\u5236\u751f\u547d\u5468\u671f\n    val filtered = remember(key1 = filter) {\n        items.filter { it.contains(filter) }\n    }\n\n    \/\/ \u2705 \u597d\uff1aViewModel \u6570\u636e\u7528\u751f\u547d\u5468\u671f\u611f\u77e5\u6536\u96c6\n    val viewState by viewModel.state.collectAsStateWithLifecycle()\n}<\/code><\/pre>\n<p>\u8fd9\u4e2a\u603b\u7ed3\u6db5\u76d6\u4e86 Compose \u4e2d\u6240\u6709\u4e3b\u8981\u7684\u72b6\u6001\u7ba1\u7406 API \u53ca\u5176\u4f7f\u7528\u573a\u666f\u3002\u6838\u5fc3\u539f\u5219\u662f\uff1a<strong>\u9009\u62e9\u6700\u9002\u5408\u4f60\u9700\u6c42\u7684 API\uff0c\u4fdd\u6301\u72b6\u6001\u751f\u547d\u5468\u671f\u6e05\u6670\uff0c\u4f18\u5316\u6027\u80fd\u3002<\/strong><\/p>\n<h1><span class=\"ez-toc-section\" id=\"%E4%B8%89%E3%80%81mutableStateOf_%E7%B1%BB%E5%9E%8B_vs_%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B\"><\/span>\u4e09\u3001mutableStateOf \u7c7b\u578b vs \u57fa\u672c\u6570\u636e\u7c7b\u578b<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h3><span class=\"ez-toc-section\" id=\"%E4%B8%80%E3%80%81%E6%9C%AC%E8%B4%A8%E5%8C%BA%E5%88%AB\"><\/span>\u4e00\u3001<strong>\u672c\u8d28\u533a\u522b<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>kotlin<\/p>\n<pre><code>\/\/ \u666e\u901a Int \u53d8\u91cf\nvar count = 0  \/\/ \u53ea\u662f\u666e\u901a\u7684\u503c\n\n\/\/ MutableState&lt;Int&gt; \u5bf9\u8c61\nval countState = mutableStateOf(0)  \/\/ \u662f\u4e00\u4e2a\u5305\u88c5\u5bf9\u8c61<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BA%8C%E3%80%81%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84%E5%AF%B9%E6%AF%94\"><\/span>\u4e8c\u3001<strong>\u5185\u5b58\u7ed3\u6784\u5bf9\u6bd4<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%E6%99%AE%E9%80%9A%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B\"><\/span><strong>\u666e\u901a\u6570\u636e\u7c7b\u578b<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>var count = 0<\/code><\/pre>\n<ul>\n<li>\u76f4\u63a5\u5728\u6808\u4e0a\u5b58\u50a8\u503c\uff08\u57fa\u672c\u7c7b\u578b\uff09\u6216\u5806\u4e0a\u5b58\u50a8\u5f15\u7528\uff08\u5bf9\u8c61\uff09<\/li>\n<li><strong>\u4e0d\u5305\u542b\u4efb\u4f55\u9644\u52a0\u4fe1\u606f<\/strong><\/li>\n<li>Compose <strong>\u65e0\u6cd5\u8ffd\u8e2a<\/strong>\u5b83\u7684\u53d8\u5316<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"MutableState_%E7%B1%BB%E5%9E%8B\"><\/span><strong>MutableState \u7c7b\u578b<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>val countState = mutableStateOf(0)<\/code><\/pre>\n<p>\u5728\u5806\u4e0a\u521b\u5efa\u7684\u5bf9\u8c61\u7ed3\u6784\uff1a<\/p>\n<p>text<\/p>\n<pre><code>MutableState \u5bf9\u8c61 {\n    value: 0,              \/\/ \u5b9e\u9645\u5b58\u50a8\u7684\u503c\n    listeners: [],         \/\/ \u76d1\u542c\u5668\u5217\u8868\uff08\u54ea\u4e9b\u53ef\u7ec4\u5408\u9879\u5728\u8bfb\u53d6\uff09\n    snapshotId: 123,       \/\/ \u5feb\u7167ID\n    policy: equalityPolicy \/\/ \u6bd4\u8f83\u7b56\u7565\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%B8%89%E3%80%81%E8%AF%A6%E7%BB%86%E5%AF%B9%E6%AF%94%E8%A1%A8%E6%A0%BC\"><\/span>\u4e09\u3001<strong>\u8be6\u7ec6\u5bf9\u6bd4\u8868\u683c<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">\u7279\u6027<\/th>\n<th style=\"text-align: left;\">\u666e\u901a\u6570\u636e\u7c7b\u578b<\/th>\n<th style=\"text-align: left;\"><code>MutableState&lt;T&gt;<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>\u672c\u8d28<\/strong><\/td>\n<td style=\"text-align: left;\">\u7eaf\u7cb9\u7684\u503c<\/td>\n<td style=\"text-align: left;\">\u5e26\u6709\u8ffd\u8e2a\u80fd\u529b\u7684\u5bb9\u5668\u5bf9\u8c61<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5b58\u50a8\u4f4d\u7f6e<\/strong><\/td>\n<td style=\"text-align: left;\">\u6808\uff08\u57fa\u672c\u7c7b\u578b\uff09\u6216\u5806<\/td>\n<td style=\"text-align: left;\">\u5806\uff08\u603b\u662f\u5bf9\u8c61\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5185\u5b58\u5360\u7528<\/strong><\/td>\n<td style=\"text-align: left;\">\u5c0f<\/td>\n<td style=\"text-align: left;\">\u8f83\u5927\uff08\u6709\u989d\u5916\u5f00\u9500\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u53ef\u89c2\u5bdf\u6027<\/strong><\/td>\n<td style=\"text-align: left;\">\u274c \u4e0d\u53ef\u89c2\u5bdf<\/td>\n<td style=\"text-align: left;\">\u2705 \u53ef\u89c2\u5bdf\u53d8\u5316<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u89e6\u53d1\u91cd\u7ec4<\/strong><\/td>\n<td style=\"text-align: left;\">\u274c \u4e0d\u80fd<\/td>\n<td style=\"text-align: left;\">\u2705 \u80fd\u89e6\u53d1\u91cd\u7ec4<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u7ebf\u7a0b\u5b89\u5168<\/strong><\/td>\n<td style=\"text-align: left;\">\u4e0d\u4fdd\u8bc1<\/td>\n<td style=\"text-align: left;\">\u2705 \u5feb\u7167\u7cfb\u7edf\u4fdd\u8bc1<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u6bd4\u8f83\u7b56\u7565<\/strong><\/td>\n<td style=\"text-align: left;\">\u65e0<\/td>\n<td style=\"text-align: left;\">\u53ef\u914d\u7f6e\u76f8\u7b49\u6027\u6bd4\u8f83<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5e8f\u5217\u5316<\/strong><\/td>\n<td style=\"text-align: left;\">\u76f4\u63a5<\/td>\n<td style=\"text-align: left;\">\u9700\u8981\u989d\u5916\u5904\u7406<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"%E5%9B%9B%E3%80%81%E4%BB%A3%E7%A0%81%E5%AF%B9%E6%AF%94%E7%A4%BA%E4%BE%8B\"><\/span>\u56db\u3001<strong>\u4ee3\u7801\u5bf9\u6bd4\u793a\u4f8b<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_%E6%9B%B4%E6%96%B0%E6%96%B9%E5%BC%8F\"><\/span><strong>1. \u66f4\u65b0\u65b9\u5f0f<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>kotlin<\/p>\n<pre><code>@Composable\nfun Comparison() {\n    \/\/ \u666e\u901a\u53d8\u91cf - \u4e0d\u4f1a\u89e6\u53d1\u91cd\u7ec4\n    var normalCount = 0\n    Button(onClick = { normalCount++ }) {  \/\/ UI \u4e0d\u4f1a\u66f4\u65b0\uff01\n        Text(&quot;\u666e\u901a: $normalCount&quot;)  \/\/ \u6c38\u8fdc\u663e\u793a 0\n    }\n\n    \/\/ State \u53d8\u91cf - \u89e6\u53d1\u91cd\u7ec4\n    var stateCount by remember { mutableStateOf(0) }\n    Button(onClick = { stateCount++ }) {  \/\/ UI \u4f1a\u66f4\u65b0\n        Text(&quot;State: $stateCount&quot;)\n    }\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BA%94%E3%80%81%E6%80%BB%E7%BB%93%EF%BC%9A%E5%85%B3%E9%94%AE%E5%8C%BA%E5%88%AB\"><\/span>\u4e94\u3001<strong>\u603b\u7ed3\uff1a\u5173\u952e\u533a\u522b<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">\u65b9\u9762<\/th>\n<th style=\"text-align: left;\">\u666e\u901a\u6570\u636e\u7c7b\u578b<\/th>\n<th style=\"text-align: left;\">MutableState<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>\u8ffd\u8e2a\u80fd\u529b<\/strong><\/td>\n<td style=\"text-align: left;\">\u65e0<\/td>\n<td style=\"text-align: left;\">\u6709\uff08\u8bb0\u5f55\u8bfb\u53d6\u8005\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u54cd\u5e94\u5f0f<\/strong><\/td>\n<td style=\"text-align: left;\">\u4e0d\u652f\u6301<\/td>\n<td style=\"text-align: left;\">\u652f\u6301\uff08\u503c\u53d8\u5316\u901a\u77e5\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u5185\u5b58\u5f00\u9500<\/strong><\/td>\n<td style=\"text-align: left;\">\u5c0f<\/td>\n<td style=\"text-align: left;\">\u8f83\u5927\uff08\u5bf9\u8c61\u5934+\u76d1\u542c\u5668\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u8bbf\u95ee\u901f\u5ea6<\/strong><\/td>\n<td style=\"text-align: left;\">\u5feb<\/td>\n<td style=\"text-align: left;\">\u7a0d\u6162\uff08\u6709\u59d4\u6258\u5f00\u9500\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u7ebf\u7a0b\u5b89\u5168<\/strong><\/td>\n<td style=\"text-align: left;\">\u4e0d\u4fdd\u8bc1<\/td>\n<td style=\"text-align: left;\">\u6709\u5feb\u7167\u673a\u5236\u4fdd\u8bc1<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>\u9002\u7528\u573a\u666f<\/strong><\/td>\n<td style=\"text-align: left;\">\u4e00\u6b21\u6027\u503c\u3001\u5185\u90e8\u8ba1\u7b97<\/td>\n<td style=\"text-align: left;\">\u9700\u8981\u89e6\u53d1UI\u66f4\u65b0\u7684\u503c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><span class=\"ez-toc-section\" id=\"%E6%A0%B8%E5%BF%83%E8%A6%81%E7%82%B9\"><\/span><strong>\u6838\u5fc3\u8981\u70b9<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><strong><code>MutableState<\/code> \u662f\u4e00\u4e2a\u5bb9\u5668<\/strong>\uff1a\u5b83\u5305\u88c5\u4e86\u5b9e\u9645\u503c\uff0c\u5e76\u6dfb\u52a0\u4e86\u8ffd\u8e2a\u80fd\u529b<\/li>\n<li><strong>Compose \u9700\u8981\u8fd9\u4e2a\u5bb9\u5668<\/strong>\uff1a\u624d\u80fd\u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u9700\u8981\u91cd\u7ec4<\/li>\n<li><strong>\u6027\u80fd\u6743\u8861<\/strong>\uff1a\u7528\u5c11\u91cf\u5185\u5b58\u548c\u8ba1\u7b97\u5f00\u9500\u6362\u53d6\u54cd\u5e94\u5f0f\u66f4\u65b0<\/li>\n<li><strong>\u53ea\u5728\u5fc5\u8981\u65f6\u4f7f\u7528<\/strong>\uff1a\u53ea\u6709\u5f71\u54cdUI\u7684\u72b6\u6001\u624d\u9700\u8981\u5305\u88c5\u6210 <code>MutableState<\/code><\/li>\n<\/ol>\n<p>\u7b80\u5355\u6765\u8bf4\uff1a<strong>\u666e\u901a\u6570\u636e\u7c7b\u578b\u662f\u503c\u672c\u8eab\uff0c<code>MutableState<\/code> \u662f\u5e26\u6709\u76d1\u542c\u80fd\u529b\u7684\u503c\u5bb9\u5668<\/strong>\u3002\u4f60\u9700\u8981UI\u54cd\u5e94\u5f0f\u66f4\u65b0\u65f6\u7528 <code>MutableState<\/code>\uff0c\u5426\u5219\u7528\u666e\u901a\u53d8\u91cf\u3002<\/p>\n<h1><span class=\"ez-toc-section\" id=\"%E4%B8%89%E3%80%81State%E6%8E%A5%E5%8F%A3\"><\/span>\u4e09\u3001State\u63a5\u53e3<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<ul>\n<li><code>produceState<\/code> = <strong>\u81ea\u52a8\u751f\u4ea7<\/strong>State<\/li>\n<li><code>mutableStateOf<\/code> = <strong>\u624b\u52a8\u521b\u5efa<\/strong>State<\/li>\n<\/ul>\n<button class=\"simplefavorite-button\" data-postid=\"16282\" data-siteid=\"1\" data-groupid=\"1\" data-favoritecount=\"0\" style=\"\">\u6536\u85cf <i class=\"sf-icon-star-empty\"><\/i><\/button>","protected":false},"excerpt":{"rendered":"<p>\u76ee\u5f55 \u4e00\u3001\u72b6\u6001\u7ba1\u7406\u77e5\u8bc6\u6846\u67b6\ud83d\udcda \u72b6\u6001\u7ba1\u7406\u6838\u5fc3\u77e5\u8bc6\u70b9\ud83d\udca1 \u6838\u5fc3\u601d\u7ef4\u5bfc\u56fe\u4e8c\u3001Compose \u72b6\u6001\u7ba1\u7406 API [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1252,1260],"tags":[],"_links":{"self":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/16282"}],"collection":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16282"}],"version-history":[{"count":9,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/16282\/revisions"}],"predecessor-version":[{"id":16328,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/16282\/revisions\/16328"}],"wp:attachment":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16282"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}