[Android]Volley源码分析(五)

时间:2023-03-08 16:24:19
[Android]Volley源码分析(五)

前面几篇通过源码分析了Volley是怎样进行请求调度及请求是如何被实际执行的,这篇最后来看下请求结果是如何交付给请求者的(一般是Android的UI主线程)。

类图:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2YAAAFeCAIAAABhAZtAAAAgAElEQVR4nO2d69GrKhhGqSclWEIKcVJGZtKAFXxlOLP/nT4sJueHNy4viFERZa15Zk/2Gy9IUJ4PBNQXAAAAACCIOjsBAAAAAJA7WEYAAAAAWADLCAAAAAALYBkBAAAAYAEsIwAAAAAsgGUEAAAAgAUMy/jff/+JGxEnTpw4ceLEiRMvOU4rIwAAAAAsgGUEAAAAgAWwjAAAAACwAJYRAAAAABbAMgIAAADAAlhGAAAAAFgAywgAAAAACzAvY6bxt1IIXV2n30fEiRMnTnyvOK2MmfJW6vv9h9B1FXCNAABwOXigZwqWEV1dfRnGNQIA3AOe5pmCZURX11SGcY0AADeAR3mmYBnR1aWXYVwjAMDV4TmeKaJlVFpQmYjbWFsGDiVu7yPmIKL6bcQUihtHbhnOqMgTRR45kGk/p2rx2x/OlYOsMoxrBAC4NDzEM8VnGXVz436wggEnFLaMkc7GZ2EX9xXP6DOmP7ilxTQEThRjl3/wsls85eIPtJjgU+SWYVwjAMB14QmeKW51G3CKPssY6U5+s4wB77joY0T7NZk561CRx4m/hPAGi1/5rkKPiJ/De8Xkz+I24V82sd7S2d+4RgCAa2I8vvOcB6jM+Ntj43xOQnQtkZ5JOecKWBDr4FYk/qTi5YQPtXjwsPda3HjxLG7CwpHFC1m0dIum8IdrT6a35+xvj2vM4b4jTpw4ceK+OH/xZ4pb3UZaAcvM+XYJWBCf6bH+DR/TTYNogKxvA2n2XdfiFfnOtWjO3LO4+/oywf03fC5xs1X5HPPLJtbbf/Y3bY0AAFeDB3emuNVt2MO5Dkb0JaL18TkSn/EKuJPwoRbPGDA6YZ+0mLBANvou0PchZi/xX9ewxuS8FffZZR9uTibT+6e1YQAAIE94ameKaBktK+A6gxhfErA1AeMSNlKufVk0Uot+yL0ucS8x4vvspiHm8t2NRU/my9VAbvt+qUD6FxXY3s3GE4VlBAC4Fjy1M0W0jJZr8RmagP8Im5tV1seypz4XZW3mnks0XuELF08nfuWaJN/1uv8VTxHYNzLfAr+RGF/M58CFW5fv5saJemMZAQAuBU/tTHlHtDIuOp5IE+Zan4ArEj1HID2+LX3HEa8xcJmLaRB39Hm1cPpjNra8XSDiy43FBMT/rOEjnCssIwDAteCpnSmiZXT/9TnIGE/p+xzp+aYExFiZRZPqxtdaxshv9exae/mrLKO4ve9cqzIwnCGBC8nHL36xjAAAV4OndqbEWMaAdTjaMro+1fWv7n9FDyQmeNHu/GYZfR7O2iaA72IDp46xjIHLjMxn328avtgT9cYyAgBcCuOpnec8QGXG30GfF3aEAXcV2HHRUflM0uJhY7yRe/wtTigmkaIdDFy+mD8xqfL9QKIBddOzKp/D6c9KrmXM4b4jTpw4ceK+OH/oZ8r7IhU/Qr+JVkYAgGvBUztTsIzo3sIyAgBcC57amYJlRPcWlhEA4Frw1M4U0TJGvhEY+FbcRnx/bvFdQ3ebjW/RLe6+ePmr/rvqjIs5uf3NwsV3KPfK5/hzHfpaJJYRAOBa8NTOFF8r42KN7rOD1jbigA/x4JGjMcT0rBrbsehRNlrGKRKfJF+G/PBzrLr28GGTWcZdflOf3lhGAIBLwVM7U97rbcHkhyItSLxlDHuLgHuISUOYsMsJbGDlRqRziknPYqrcQwXSvHjVYq6KR/6tnPi+9aUqvGO83lhGAIBLwVM7U94/te5YtiZgccQPrl1Y9GriwVelea3REQ9lpSecKvE48TYocFHuocQ8CV+gb+PIS4vJRnH3wO8ec9K1iXljGQEALoXx1M5zHqAy4+89OqZ9liXGuukmTLRoa+1ROOWL34Yv1ud19M1iEuymRD/FDyZJzEZfxor5HMiEtS7NvZaYHyLypGsT83YsYw73HXHixIkT98X5Qz9T3psto8/u6D7A/Tewb8BeuF5n0RWF3caicRF3jElPIFWBPIw5u/WVdeSwo4rxYTG/SDg9vsNGZlF8UmP0ppURAOBS8NTOlPcGyxi2RKKb8W0TMChrLULYaoiuRdw9YH3i0xBzLYtuz5fDMWdc/L18P5abRd7fOyJVgav2bRn+HeP1xjICAFwKntqZ8nY8TYwtiLEIrtsQzY0v7qbH52zWWhm15M8CPiwmPb7tFxMTyFLx4OFstDI//Hv5jh/Oq0X5TurLQOtnjT9mQG8sIwDApeCpnSnv9a2Mix5FdEvho/kOGJ8qK2FhY7H2FKv8ZWDHH67d+ipw1WFzKZqzxR9xMbvC2pLPWEYAgDLhqZ0pomUMG51VVb71r89BLlqWxc3irWfYUy5ebEx69DT4LNrivqt+CJ87jLyuEy1jwLmGbW6ksIwAANeCp3am7GIZA3Yn0uoFPFPARvi2Ce/u+2+ktVpMj75ZTE5G5skUdDeOMVJh+xX2ZGtdWsyO4lX8kFeLemMZAQAuBU/tTHlH+IOwixKNS9io/eYV3MPGW4qAqYpJXsy5xM+BfIhJm+9b15KGHeHijxi4kJ/9Yvg3mtLvOtefTycKywgAcC2Mp3ae8wCVGXctI0J3kmsZc7jviBMnTpy4L84f+pmCZUT3Fq2MAADXgqd2pmAZ0b2FZQQAuBY8tTMFy4juLSwjAMC14KmdKW+lELq3zr7JAABgBTy1AXIERwUAAFlBtQSQKbhGAADIB+okgAuAfQQAgHNhXkbixK8Rn97/yyQ9xIkTJ068qDhNFwAAAACwAJYR4JIw6BgAAFJClQNwYXCNAACQBuobgJuAfQQAgOOgjgG4D/RWAwDAQVC7AAAAAMACWEaA20KjIwAA7AXzMhInfvO4zzXmlk7ixIkTJ55znBYIgIKg0REAAH6D+gOgLOitBgCAH6DmAAAAAIAFsIwARUOjIwAAxEBVAQC84wgAAAtQTwCAAfYRAABcqBsAwIbeagAAsGBeRuLEiRMnTpw4ceLMywgA26DREQAAqAYAIApcIwBAyVAHAMBqsI8AAKXBcx+Ko+9mRQihonT2oxcuD2UIiuOt1Pf7DyGEyhGWEbZDGYLiwDIihEoTlhG2QxmC4sAyIoRKE5YRtsO8jMSLi2MZEUKlyWcZc3s+E885zp8dUBxYRoRQaaKVEbZDGYLiwDKik9U+lVJKqbo9OyWoGGEZYTuUISgOLCP6Ud2rql7d2q9sfWr1aLqzrwUVJiwjbIcyBMWBZUR+fWrZ+fnio+ItY/eq1LP9PYV/TSXu7osj9O+LZYQ9oAxBcWAZkaS/plJKMHNavPeF3auqXk2ttM7lfhullKqav2/3Gv/3aLphr6buD/IZ91OqerXNQ+lbfv99tQ3q9p99qK+2jeBQfXGEsIywA5QhKA4sI7LU1pYn88Qnyzi9htg+B4s2tzJ+6sl3utt/Pe2R7VPVn956ai84OofSd+ndZP2xL8cXR2ULywjboQxBcWAZkaZPLQ9DkeJaK2OnR6wPSufZWm7P2l1rdOzcLa1Duelvn+viqFRhGWE7zMtIvLg4lhFZWt3KGLaMbnOgaBm7VzUd3D2yeCjrsLQyomgxLyPx7XH+7IDiwDIiSeveZRQs47Cv0zwZsIxjvGseqnp1Qse0twWUdxnRKtHKCNuhDEFxYBmRX8ER0wHLODRJWsNfPN3N5i5Kqap+uv3a5vCXyQsyYhr9IiwjbIcyBMWBZUQIlSYsI2yHMgTFgWVECJUmLCNshzIExYFlRAiVJiwjbIcyBMWBZUQIlSYsI2yHMgTFgWVEl1T7VMyeg34VlhG2w7yMxIuLYxmLkD0PtjDt4vnqXaA9Jjq4cf3pmscwNPv09KPriHkZiW+P82cHFAeWsQj1ltGYuSa/OWj0hsPFRNLKiDaIVkbYDmUIigPLWIR0y9jPcT25Mb1tz5kiUZhbUdusb+GbN5uOVj2q8AHF85ou0Gg+DGw8fHg1lVL6atfWlvq+U260T6UeVaU1uxoZhW4rLCNshzIExYFlLEJuK6PWmKfbsqr5E7p6td3nbzWH1zvCujW82hT0HdA6r91wOP03vLH7QU+PuO9wOY+hIVPbsU+qtMYMupWwjLAdyhAUB5axCFnNhGZLnjK/EtoOdcc5GqzZln3dNj/Dt7kHFM/rs4wLG897Ta2n86qG8r52r7ew4/k/GTpSWEbYDmUIigPLWIQmzzd6x97qeceO6J25k8f61TK6B5TP6+mYXtjYbSNs5pZFeV+n93nYsX4KG6M7CssI26EMQXFgGYuQ6/n6t/eGz552takLW9vd7oMWO6Zdy2gdUDyvO/zFSLBnY2HQjJrfTRT3dV9YdHdEtxaWEbZDGYLiwDIWIdMkjYNRHk1n91lPrXrj//VB1lq74/ffNzD8xd8xPRs157yhSXZ8Gzvd2cOl6SOp3X2lMS7Cjui+wjLCdpiXkXhxcSwjWtb9xxH/GQOu0d3ls4y5PZ+J5xznzw4oDiwjWtbtLePtLxCZopURtkMZguLAMiKEShOWEbZDGYLiwDIihEoTlhG2QxmC4sAyIoRKE5YRtkMZguLAMiKEShOWEbZDGYLiwDIihEoTlhG2QxmC4ngrhRBCpensRy9cHuZlJF5c/E0rI0KoMPksY27PZ+I5x/mzA4oDy4gQKk20MsJ2KENQHFhGhFBpwjLCdihDUBxYRoRQacIywnYoQ1AcWEaEUGnCMsJ2KENQHKVaxr+mUqr+nJ0MhFaqfSr1aLqzk3FxYRlhO5QhKI4DLWP3qqpX139QE1nUdl3zSOcXp3zwfZsyc8KJmTJHKaVU1fyd/kvtdtWZlcBNOd8+1dKPiMLCMsJ2KENQHF7LGOEtFqRbxulQ3atSz/bkCuNTp/QNi5YxZeaEEvOpja8+9ZCYv6Y6/Sfb76qzKIEbc/6vqVTdnp7sCwvLCNthXkbixcWjLGP3qqpnPTbUDHXV3HIz1GpTG4mqXl3f89v/r35qNmWqDvUjDAbOOELMSbtXVb2a2tjGTIZwlrmRZt59PJrdEPUZjz0lSc8T+fjefGj+vt2rstyq4eFCmbN/Yuafu49b7kRLTH/qxT8hlvIz0e+7IZMTpXBzznfN4z5twGfozbyMxDfH+bMDiuMdaRl1v6We7fdT6xVk/dEbb9p6rk3tVsa5T82sufsaWj9C7EnHurw/sp0M5yx6davvLmypteVMKbRd2tJVBHLSzedA5hyRmCEuWpl/be2869lbn0CHfjg/U/2+v2dyshRuz/n2yZu4W+SzjADxUIagOBzLqDVlTU1adjPho2ndnr5+R629RHyX0dhLxzmC3TIknVS2TeZB7LOYlnEhPY6lsE63eBX2hThakTm7J2Y2QG4Z8DZiDebJcy0Z/L7bMjlNCjfn/Pb3RsrWG8sIm6EMQXG8YzumFy3jXOfpfXad9WG5zhuP8GOFHTjIIK9ltLeMc2nhqwhdqXnehcw5KjFSW5feMWomVS21MobyM9HvuyGTk6ZwU87TyrhNWEbYDmUIimO1ZRz69YQeunpoHflrqkfTadWztbuvocU6Qht1Utc2mcmQmnPMdxn9TW5SX7D+4qaZJPkqOsemhPtMva1QByTGPLi3iW5Mj/NG3V9TmU1i4fxM9vv+nMnJUrg153mXcauwjLAdyhAUR6xldPv+5uBcAQ9df2Nl1tZK2f3a/eCAyb7o3YXmEWJO6u0W1JIhdEqOI6atFiB3SycyT4MyXVT4KvR8WB7+EsicAxJj/+jTuF1rRLlv3K4z8HwhP1P9vr9ncrISuDHnGTG9VW8sI2yGMgTF8Y6Zl/GUF6eOPOnqeRmzenUsk8Rs7BvN5CqumELmZdwsLCNshzIExVGmZVy9+ktW7iGPxHTNY1NDVx5Xcb0UsvrLHsIywnaYl5F4cfEoy4gQQjeSzzLm9nwmnnOcPzugOLCMCKHSRCsjbIcyBMVRqmVc2TGNUGly++Xz6amPT5unHx/LCNuhDEFxHGgZjcnwJrJ4DWv18Jd9qzfr25SZE1HrzwOxbzONS34l8AI5v9EyHprnq9ImjRbCMsJ2KENQHF7LuL1FwZ3K++ubFzCxnNlhDlXkVN5pMieUmGmqlymX+sT4pnq5jrIrgVfI+e2W8bg8X5c2YU6iEizjWym0RYs5fP8yBGARZRm7V1U967HRYJ5QeghoE0r3VK9umKNYKWG9QXeKu8HAGUeIOWn3qqpXUxvbmMkQzmJN5d3U2tGsLfXlE8UFVxavQs+H5XkZQ5mzf2LMOtWZUFpfiUSeUFosM4H8TPT7bsjkRCk8NOel2cXtRIaTPc9aOl2+OY/pz3l+Stqkmc/fZVjG3Tx6eYopIfcvQwAW3seK3Uig+a1xNV57GYyxnmtrz4KBX72TSFoBTz9C7EnHurw/sp0M5yzWgoHzyhzultKCK8K8zcGrCOSkm8+BzDkiMUNctDL/2tp517OLWDAwkJ+pft/fMzlZCg/NedGWCYk0I/rR+hk3tcsflhfyFbP4PD8lbV9hDlEsIwoLywgg4DxWtKasEaeZUFxjWlvI2Hpkz3/3a+0lenDY0TyC3UoRucKvcxD7LP41poX0RCzrHL4K+0Icrcic3RPjW8vuUwdep5sX3JOuJYPfd1smp0nhwTkvteQtRNxcsn/N8WI35vkpaXPuwTeWEQUVU0KYl5F4cXHvY8VXCXkt4/St0vvsOuuD/yH+tY7wY4UdOMggr2W0t4xzaeGrCF2ped6FzDkqMVJbl94xaiZVLbV1hfIz0e+7IZOTpjBFzsfbMr2ZUNxGt2W75HnKtEW3Mub2fN4SxzJuUV9CmJcRwGC1ZRy6ioQeunpoHflrqmkBX8emzC0lTkOLdYQ26qRu7WImQ2rOEbvJhIYfqS9Yf3HTTJJ8FZ1TZYb777ytUAckxjy4t7loTI/zRt1fU5lNYuH8TPb7/pzJyVJ4aM67BWOlUXP3Mi92Q56fkjbeZUTrtbqVEaAEYi2j2Nfj9LUNHUfj07mtlbL7tfs32Sf7onddmUeIOanga51k2Gf5N4+Yttok3C2dyDwNynRR4avQ82F5+Esgcw5IjP2jT+N2rRHlvnG7zsDzhfxM9fv+nsnJSuCxOW8XjBhbNhYMYy83Yz1FMT7PT0hbwSOmTzde11VMCbl/GQKwiHqsRHZF7asjT7p6XsZTciDzxDidfZe8iiumcGPOl6ZS52U80DIaf02p5HOdOq9oHyAsI4BAmZZx9eovWbmHPBLTNQ9/f+tlruKKKdya80Wp4NVfDreMRrNuyglEsYwAJ0HnBUKoNGEZN0m3jJaBa59z4+P4F9f0XkFP3Y6b1Z/p23lapeDuVfNnHu0o44hlBBDAMiKEShOWcZPcVsa+x6Z7VdMrvO2zd3iyOxSD0u79y6/mu9e0MgKcxAUt48o+ZXQJrZrAZUd5Oi7RvYVl3CTrXcbxaawt0jN/pTcihi2juLseHI1jlpYxh3mViBM/bV7GXR4r7hhGpTbW0KtHruxyCcvPzeNtR4Sdmoej+qaDPkVGysfpfsRt4i3jjoVKGh6B7i2fIcjt+ZzpvIxTK+N4G+rrOloPn7WWUXh26b3V9SelZWReRgAD72Nle3uPbhl3q5Kd6UUO1aJllCbDOyMx0ywtUy71ifHN0pJYmk30XcUPlnG3QiVMwoLuLVoZN0nvmB783KPpps/GM0c3grZl1GZQmoPh9YTSWsYw9y9DABZRlrF7VdWzHlt15gmlh4A2N+/QxvXqhjmKlXLmZZwO3tRqWh5j+Owe1vrWnIVb2msylNrKh57J3ty9vJewPKWiuTrL0YmZM1OcC1pfREScC9r/RJ4S8PNv5GaUPpdy+3RmK9QmOPTmhu7qnIVYNhYqaapndG/FGIKr4322b5cx/GUanuLMdTo8rOZnV0/d/vMEhd2N3mp9/nb9jj6phNy/DAFYeB8rdhPaaAKGhRykZTDGu7etnQUD9WfD2J2hPyM0N+Aedm4BMtb6M/ayViST1koRplx2luDzXcJXckL6t3PnZpLEzE9qoc21rZ13PfVX1GWJCfjlNxIt4zSVYFv3W3qWUfHlhnaE4cN+hUpPHipEWMZTZAyOzluHW8a3Ugil0ZaC6pZb81bR2sNGzGZC3xrTTmdBoGNabGZzPztL9HqXhzbS2ycmYkVmYS/PJYjSj5A6Mb5l6D514EXGea284LX05/31N/Koz4Sxo9x3EG9uTEcYTed+hWr5h0a3075P0Txxnu3nC8uY9c+DbqmDLeMoX6XrtYzTt8roarR3Dx78Z8to1/dxLk12CdIlhLNIz4GEiZFaGfUuaTOpKtjKuK8Dk9TWj6Z9VdNkHGHLKB2wrVXdjhe4b4JpZSxMWEa0vYRgGdEFdLJlHHpghc6+emjcGsc6TEYqvnb39VdOO5rvMvqb3KS+YP2dS/MSplR5L+Eb0TGtrbV9eGLMgwdf6BHfZfxrKmGqMysBP/5GYsf0kEXBzmKjY1pqiui0adt2LFS8y1iesIxoewnBMqIL6BzLaPcSOkMKtB7tqfbtuyGq+mnPh9L6anfPqIg5YeOIae9e1jJWc2SegGbqZ7e38V/C8vCX/vjOC+AHJcb+vaYR09aIct+IaWnguZWAQDtu+DfyWUarBVQ8iNFwa+bhcDnayOvdChUjpovTG8uINpeQTfMy8vOgNHpHzBe1c7nN6U2v1fMy5pT4XBJz0X7YgyZQZF7G8uQzBDnMp7hXHE+yvYQcOC8jPw9Ko33/Pr6cZVy9+ktWic8jMV3zuGKj2jjaelex+kuRopURbS8hWMb91BnzNmUhbbr5S+sEy4gQQjdSIZYRbdFiDt/QMo6vTI3TIIdWEtt1RnXRMurL/ih7Ws7Nr58vpR/LeJ1yixBCx2nfp2ie8Gw/uoTc2DLOq/GcbxmnWTZ2PF1M+rGM1ym3CCF0nLCMaHsJua1lrOunqj+GZdQb/KpXN6/50/Ooppk75r3+msoe76n0OS/6Q/WzjWiWcTjy8NVs2ubGRWeF8vnI1rhIdzSluXjlyJzyecdhUctHZbZxullhX8vZP+IPRfnq5RYhhI4TlhFtLyH3tYz9/LeT+dOnN5sdodFKN80YMrjDcZUt0eENizHMhkyzjLpNtNr5pv+OH4Qeas16Sv3X/aR0/dvrZiujtur59/vX1JNlnF3slGw7K6xrOftH/KEoX73cIoTQccIyou0l5MaW8V9bq7oeLJGxzndP/REtV93+NZWq6+dk/vpDqWmi3cn2WR3Nuuuy2vOWLKPedmh0cGu7m5cgWEZhYSLJ6cpZsX+neeqivKrcIoRQadrxKZon7yw9yVUUU0JuOC/jZBmn7tfJMjovNVrvAvaL1b5q9Wi6T60edf1Q4xqvymcZ7cmf+w5uszc82DFtdBNbh5UaI7U10363jHZWZDjc2ynKOcz7dVzcfbjnmU7ikfHp+ZtJeogTv308T09yFcXUO3duZZwW55gtmt2KZg8fmd9BHPp/hdY+p2PatIzD2mijq3OHvzgH/Oq7m5ZxOpe2Bsb6jmkr2WJWXMEy3pjSGgNuD78jQHry9CRX0epWxnv8PJplNFcbk0aQaL20z/arvcXorFS20IP8Fd5BVOPLlNpZ7Q5ro5tYGuky2sppLbW+FXOYiddKvzz8xbKMYlZgGZPjesRbXmaZYBkB0pOnJ7mKCrWMl1fe7u0U3ab2DTQl3uYagb8BAE7hvf79ThSolVywjPkJy+jo6lVv+IakRepmYBkBTgFPcnQ9i2VEF9AVq97IP92ueGkQQP9B+XEBUoInObqexTKiC+gqVe+qFv4vluJ2WD8ovy9ASvAkR9ezWEZ0AeVc9a61iXBjsIwAJ4InObqeNba4x7yM6H565zdPYcAmZpVO4sniYmF4K5VbOokTv2scT3J0PUsrI7qAMmmtoUERfATGNiVOCUCxrPYk3asSR5r64lfVOM/0OD3fz/XsVsuIUBptKah7FfKz0gD54yseFBuAZLz3tYy/GUdj2uOQRUumrnnMS835ryjmYUUrI7qAEte72ERYRaCcUIQAkuH1JGtbE7e0Mur7dq/KXnMuvT717Fz/mspcVXhlPYtlRBdQgnoXmwg/g2UEyIFYy6g3BNqLrj2azmxlNGzfp+4/S9s3tVLq2RrnGrd3d9EXbxvO9azHLZx12saTDmeZtzEOIp3Falnsmse0pt0P9SyWEV1Ax9W72ETYSLjwULQAkhFnGT+17smqV2cZO90sVq/u+6+tx+3bp6o/thEcbKV1zHH74bO4yxBp62fbvSrd5Klnq6Vz6FnWz9If2TqIexbXIw6X8GM9i2VEF9C+9S4NirAXMUWIYgaQBseTfMYmuZmqfhodx6Ph0xhbCifzN9qsth7bFMXtp2NaTZhfaZchbbbDG5P9aFqng9s6y2B2zYPYZ3Eso7/PHcuIbqLtlS42EY4AywiQD1GtjO5n10XZ8b+merbfTz11/orbW5/1Hm2vURs934+WMXCQQQe2MpYyL2Pkm613G2Z/Yb1/mpfRZxNzmD+M+A3ikV7Qt9np6SdO/Gbx6I5p7W3Csa3OGBTiWMmuedT1c/Renu3dz0MXs7xLPRztr6lMgzh0Z0sd047ZNQ7SOWf5rn6XMbt5Gee3NZXyJX1PmU21dfurZVzpIFNfpn2lx4/tj8iQKRM25sCqdhpaEyENGy0jAOxLnGXsnZzZSW31Jrutj9bYZ3F76Vxd85iHyBgd1nOnedX8mdW329E8D3+ROqa1SlboFr/yiOnR1Pf//dQJ7FRMK/Svliiby/zU4fJ9dMaK6dH/OySmb953t/fFBy0WZfqdITHx5Y0yCZCGq/Z8LtSnW5X9vIzacPG6HaYdr9t/ptvVssn7HoDWYBazzRCRTtF/7nvxhd31IfRje2Sjvfo6vVggjXKX/no4+DJn9dnr/AkSHNtvvBQcmTB7MP80m7zlhrX0zNIS059aKLW+uLcoYxMhB/Ry6CuKFFGABGAZPcpm9Rfvxfcp681Wpw0ItzPlU3vHAUmD3sPbfD2WcbJHhi1zXhSw2mytkW7elUgAABlZSURBVPDuWHrnhQN/K+bel/n99/3+a2uzBESO7dcvM/6k9mB+oYjb6dHj1vu2/Y/ivoTriU9FGZsImSM6SIorQAIubBkzUGrLOL+4pr8foH+I91KLg9jFbcSM8HVMu9247suL+mF97iqq43v3y5TechVeYvCN7Y+4KGEvM5PtRk3xDYlgp/z8avBCHJsIl8AtohRdgGRgGbfo1FZG0TLG99i6rmufVxI16xZjGatXO70E4Euq/nJA2sv0tjLqLzL6/OvahM37KqkfXEqPdS7rMn9qZQTIGQoqwIlgGbcoQ8sojAsZhjCPxiI06H1xm2/Eu4yzH4rrmP7+a+txQJO3D1d7kzLNZc7yvMsYGNsvdkxHJMwczO8bYSO+y6hrt3cZAQAAJrCMW7TaMu42L6PfMn7N2WcmUyJ3apvdrDHbLL3LaFqr+Sth8vR5+Evfu9qfVLCM84h9vUf42Mu05YyYDo3t/+2kzmD+oVlR7HeeRkxbDa6bRkznMO8XceLEiRPPM45l3KKYevaEeRkHRXYrX0vuvOqZX2bmyRtFKyMAAITBMh5dz55nGcc2qhSTTh+sdp6xRmgqy/oysYwA+0FBBTiRtzlfAVqrxRw+0zIiFClqYsgfSinADYg0T2WCZUQXEDcw5A+lFOCi/NDeViY3tYxZ9bdmlZhrihsYAAD2xTWI+MUwaS1j96r0AbYBL7XRZsXsnlViUFDcwwAAsCNutdJHqG4CJLeM1bOu7FkM97dZkZYxn8SgoLiHAQDgOPCLMRw3L+OzrpRSqm6H9bCHuaz75VL09VS++hSAvYGbltC2pgnsxyOPc/hZsyp2r6p6NbUylt2bFrn2TfF9SmLOdmCX05t5GYlnH/dVNrmlkzhx4hZvpfq4exdnlc7T48e0Mk7+bDJJxrIr/9pac5Du+nX6h/HbrnnU9bNu/43TRDtrt3SvSnkXNQmsCnNCYtBPlhEgWyiiABfFepfxxJTkz56WUV5BRP8g/tdYnUW5a9+19aPp/rX1s+1eVe/G+n8DK0QPxwxatKwSg4LiNobMoYgCXBH84ioOa2UMW8a+oa5xVm12j9Bv2faNeX9N9Wzbp9Yo6Hdp1asdVo5esow5JAYFxZ0MAAA74g6OpqJZ5DTL2C/cPC1ePK3CPB9B6yCuq0c/tLlrnnX9bLphd7sv2Fn9ua3HMdH+jukTEoNWijsZAAD2wjdcGsKcaBnHFxy/+tgRpeYuYKWGSXA+9eT2pl2MvezuY/PtQ1U1f0uWMW1iznZglxM3MwAA7IJYoVDLxJB2kh2EfhI3M2QORRTgEnCrbgHLiC4gbnLIGconwCXgVt3IMfMyIrSrmJeReM5xyidx4vnHuU+3x2llRBcQfxoCAMDPUInswhUsY+IF91jfLz9xtwMAwG9Qg+zFGZaxfc5TZcdMVbjRwyU+HTpA3PAAAPADVB87ktoyds1DXwelrSPWRNng4RKfDh0k7nnIGconQJ5wb+7LcfMyPutKKaXq9q8ZPvz7fv+aypwc8fvvq600qOapEz/11DLYvKrq1Yz/nxdutnZxZ1489HQoobjtIVsonAB5wr25O4dZxt5atU81fRhWcA6287VPVX++37+m0pZg6V7VZN2G2bM/tbYcyzxbuDtZ93GnQwnFnQ/ZQuEEyBBuzCPY0zJOrXdV/Yxa/WWSteCKtZm7koq+/bTginjYlKdDh4mbHwAAIqHKOIhj5mX0LRior7anb6x3Lkd6uKimvsSnQ0fpzXxaxIkTJ048Ik59cVz8uHcZRcsojUfRDFnXPFT16tyeYnu95k+ttA2mrxyDeODpUELxJyMAACxCZXEoqS3j1xh9Msx6045jTYwebXM8SuceWe9c/sqW8cDToYTiKQB5QskEyAfux6O5wlTeqHjxIIA8oWQC5MBbKW7GBGAZ0QXEswDyhJIJcDrchsnAMqILiCcCAAC4UDukBMuILiAeCgAAYEHVkJgsLSOT2pAtpnguAACADvVCeo6ZlzFgerQZsb3T1iSYDdFIydlrAOaTLbmKebaIZxi3aqzT00OceDnx6e7LJD2FxNO2MlpTHvrsUQJXZKfk1AVd8smWXMVfk5AhFEuAU+DWO4vj5mV81lXfZvbXVGPjmW+dlbmZ7dF0ZnOa4efGtZ6l7ZtaKfVsjXm5x9VfxOWn55SYS0ibTY/ztI5DkobrmpsD513GtA2JmbcxDuK73vTZcrYRxDLCpaFYAqSH++5EDrOMvSlpn2r6IHSq9l7HdGy6K6pe3fdfW49ep32q+mM7vHEN6LllbthM+xC2jH3aXO9oOrNh5ZjpOO1TDYnXfGH9MZoJp6vWD+K73vTZch3xjAAAAOqCc9nTMk5tacaqKvoH0RuZb/IpNa7pN208Wpy2npoMpe1ty6WZKtnUjpidwsaRv596aj78um2Tj6Z1Org96w0qoSEzmP5TsiVX8ZgAACgcKoLTOa5jOsIy+sZz2PG/pnq230/trD1on25UW6u61VrdwimUHaGu0fP9aBkDB5HOe2K25CqeFAAAJUMtkAMnWsapS3fu2/V5pq551PWzav7MHb3eqG9yG7eP6JgeXJRw5Ho4yF9TmQZx6M6WOqYty2gdpAunP2G2XEc8LCA3KJMAyeB2y4TklnHuOdU8nNVN7PpLa1CzuL2Rht6c6dsHhr/0XepO9+7cp6xU77SM9LsdzfPwF6ljejyImP5TsuU64nkBuUGZBEgD91o+pJ2XMZnmES27yttzfREdlC3H6828jMQzi7vVWJ7pJE780vE38y/mFE87L2MqHTXC4+KW8YoDX3rxVyYAQGnw5M+Ne1pGdDPx4AAAKAoe+xmCZUQXEM8OAIBy4JmfJ1hGdAHx+ICsoEACHMRbKe6vbMEyoguIJwhkBQUS4Ai4szIHy4guIJ4jkBUUSIDd4bbKn62WEaE02qvEAwBAbvCQvwQ3nZcR3Utv5mUkTpw48ZvGdb+YQ3qI++J0TKMLiD9AAQBuCY/3C4FlRBcQzxTIB0ojwF5wN10LLCO6gHisQD5QGgF2gVvpcmAZ0QXEkwXygdJ4XU4fxoeS6eyydk8yt4x/TaWUUko9mu5844LOEvc/AGzn+DoLZSGqjIPIwzJ2r6p6dfqH77/v91/XPFT9+X7/fdun0uKoNHH/A8B2sIyFiCrjII6xjKbzWyFjx089Ny7+NZWq2/MLIjpF3P8AsB0sYyGiyjiIY+ZltC3jp1Yj1avTv+0/D5GpG1pVzZ/Vstg1j6r5O70golP0Zl5G4nnE30pllR7iq+JYxkLEfXpQPEEro9ZAaBhEKaJ9ZXvE9jl0UqPyxJ+MkAkUxUuDZSxE3KcHsa9l1FoTp1bF5lWrZ9tvsMUy/tzZja4v7n/IBIripbm/ZWyfSqmbNK90r6rvmVx/gdynB5GglfGzj2WklbFgcf8DwHbsOqs3JTNZTs3RmyT95a7FjetP1zyGV7z2TUzKHMMy5sdJHdOjieyah7Is4+QveZcRjeL+B4DtyJZxrn2UmiqgfKSbpMVEHt3KmDLHsIz5kWTEtP53SfXqeqfY/69+Wu2ObT0Of2HENBrF/Q8A2wlZxuHFKq3NwmnYa7VXr6rmz25y07rIjM2mo1WPKnxA8bymSTKaDwMbDx9e/aDSofYckqFtqe875Ub7VOpRVVoj4vSVL8e0RPYXVbeeqxaDZk4OVydmr54b0m9ElXEoaedlXPk+IvMyol7c/5ADlMOrY9dZbpuZ1pin27Kq+RO6erXd529D5unVaUHfAa3z2u1q03/DG7sf9PSI+w6X8xjaDrUd+6ROOwo5Fn3VcnD+UfqJUx5Nt5S94iVQZRxM1paR1V9QL+5/yAHK4dWRLeOE2ZKnzK+EtkPdP41WxrBBQd/mHlA8r88yLmw87zW1Bfb16bP1ncjuaBZ29OVYyDLGBO0k2ZbRvS75EqgyDuaYeRkR2lVv5mUknkGccnj1uF1nWf2tpn0R3p7Xe0Inj/WrZXQPKJ/X0zG9sLHbRtjMzXLyvs67g8OOtdaG58mxjZZRT09br7CMvhEOb+ZlPCaetpURoZ/En4wAsB2vZfxO7u3RdNNnz8COqUNW2/23pjX7gOJ53eEvRoI9GwuDZtTcXyfu6w43cXcM59ivWaGNYZA7poXdg78RVcZBZGsZ6ZJGs7j/AWA7Ics4D0bR/MrI1Ko3/l8YtCH2axvjVPwd07NRcweCBCbZ8W3sdGcPl6YPNHb3lUYo2zt6c2xevG3IjHXueZrUWRt2I2avbIW1rKbKOJJMLSMDX5Au7n8A2M7OdZY4C8yt9GcMuL6OqDIOIskkO6vF9DrIEPc/nA6F8AZgGQu5QO7WgzjeMnavqno1tVLq2XrWfWnGJun5RVom8UaauP/hdCiEN+C4njGUlbhbDyKJZZy8oGgZHafIUoHIEvc/nA6F8AZgGQsRd+tB7GsZpzdYtTdS+/Vd+g0Cq0tr39qWcWs3N7q8uP8BYDtYxkJElXEQx8zLKBlB+XOMZaSVsXi9mQ+POHHim+NYxkL0Zl7GY+KJ3mXUOqmHWZS65qE8lpF3GZEl/mQEgO1gGQsRVcZBpLWM2oRVQ4e1vCUjppEh7n84F0rgPXgrhQrR2WXtnjAvI7qAuP/hXCiB9+C4OgtlJW7Yg8jUMrL6C9LF/Z8bpzchoL10dlFKyhvLWIZKK9jJyNYyIjSL+z83uPfvodLuLMptISqtYCcDy4guIO7/3ODev4dKu7Mot4WotIKdDCwjuoC4/3ODe/8eKu3OotwWotIKdjKOmZcRoV31Zl7GzOLc+/eQXrPmUK6OjlNuC9GbeRmPidPKiC4g/mTMDe79e6i0O2t1ue1ewzhMpVKMxQwvdZZVYvJWaQU7GVhGdAFx/+cG976s9qmUutBqVaXdWb9YRmkpiqO0aBnzSUzeKq1gJ2OrZUQojfYq8bAL7yMsY++3Ro5Z8+lTK6VW1bVmqhamiR0tY79mQf7LVpV2Z3nLbfeqqmddKaVU3Q5TvNWtZZs+9VRy5ga/qbWvL1pjIRFXqXD2mta2UNWrm6eWU1Xz9+1eldWUeGJizi6oFOxMIFsBYDUHWsZjm+h+tYx9qoZa1r87rYx5E7KMvXNqn2r6YJmteV0J066NBmtYpayPCC7N2UtrKWzrZ/t12xH9ljFxYq6m0gp2MshWAFhNGsvY1nMjx9AEMi1D7zb7WUHtaP1x6nb4MPJs9ZaVqTWl94XDEZ6tmSqj+dBNxrTx8OE1t1dN3/ouwTjvo6q0RqPpK2rWbVjl1l7A9ms2wg1GyilpxjuFfUGSHJjl0uS9zL9A4t9lPD0xeau0gp0MshUAVvM+vGN6cEtt3X/+1Ka10k1b1fwZbuz719SyZbRbGcVtBn/2GBoULSM7/TeQjNkyfgKnsPf1n7d3NoPvpGbdgLfcWk7x65gt/d1BwUvFuTTZgWllMvJdxhwSk7dKK9jJIFsBYDUHWka7V3d6p2qoBfV2wYH6o5lC4Wg+y2jsZXpB0Vbq/xWTITnF6Yz9hdhNm/O+dq+3sCM160Z+t4zDT9//Cp/advBSX7BeYoe+YHOv7lUPrwn+NdWj6RwvGO6YTpmYq6m0gp2MTfMyEidOvMx4Qss4vchvWEbrlfz9LaPV3+10TMsDXKTGxaGNsJlbFuV9nd7nYcf6KWx8QM2aQ7k6Or7JMg6/yGSnRuzRJENE7vU2tpkHqUy/7/wyxsLwl7SJOaDsHao38zIeE8eJA8BqklnGtlbzi1bGW4Bm+4evY7p6dT92TEuWUf8qkAzTMgoDWsV93RcWhZGw+9esZxelpBxSbi1l1Z+bVWISqrSCnQyyFQBWc6BlnJs6PvrYEWP4i/nyvmcwyjxLSI9xnNGxhYa/SKnyWLpxd9Eyjn7UcMPuvtIYF2FHatYNYBkLUWkFOxlkKwCsJkXVi75/xoDrA1RazUq5LUSlFexkkK0AsBqq3hQ6bG6dSaXVrJTbQlRawU4G2QoAq6HqvYdKq1kpt4WotIKdDLIVAFZD1XsPlVazri63xiunRw1C2qT8U3iGSivYySBbAWA1WMZ7qLSa9RfLaKyzkt88hfmn8AyVVrCTwbyMxIkTXx3HMt5Db+Zl7NW9qupZD4ONtFFHxohjc1UVs2FvHno/zOY4HG0evTTvMq+t0tTGNsZBpLMsTdaYQQrz0Jt5GY+J48QBYDVYxnvolo0xgYsKWcbe9LRPNX1wV38ZPksr8s3zwz9b3dgNy7TMq610zWOaMX6eRt49iHuW75JlzCGFeeiWBTsHyFYAWM1bKXQPnV2UDsF3aW/TMsprolirv6gRo/9XZ5xqXvZPn1o9mtbpPnbXfXYPYp/FZ3bzTiGW8UaQrQCwmjetjLfQvWtW1xZ7y+3igoHW6s9yi9roqH40ZIGD+JV/CinYN4JsBYDVYBnvoUJq1sk4/m4Zv1MH7r+v1oc77V4PCzH/NZVpv4bOYqnb1zJk1kE65yzfiI7p01OYhwop2OkhWwFgNVjGe+j0mlVsCDw0ImdFjGUcOrIfTed2B3/q6X/T2o9Wd600uETq9h0P8nXPsjj8JYMU5qHTC/ZdIVsBYDVYxnvoLb3UmDKShuVWxn2VcY/tZVK4TVjGgyBbAWA1WMZ76N41q+hZU2Rs/oYs/xRu070L9okwLyNx4sRXx7GM95Bes+ZQrvaK606Rclug3szLeEwcJw4Aq1ld9Wa1rJn4IlfMXj83zNjTkeyXA9uai+7XGBPu+MYyFqL7FexMIFsBYDW/WMZ8ljWTZz9es9eWMx53LetVWs2al2V0f7t8+otzTluESivYySBbAWA13qr3EguviYmxDmsfZLgWZQ84nQ/Y1FqSgsNax/Pqw06tUa7T7vMY1bpxR7D6UmXljNegl1az5tU6vtGW5Zy2s1VawU4G2QoAqwlZxvwXXtMS0zUP76R0xkH0KlNMtjZBnWgZ9X5pY+7lfoo76bDfv6YyD+tOrWykyp8z1Kzf7ze31vHtljHbtJ2t0gp2MshWAFiNVfVebOE1cbo7u/Y1D2JdkXvAcG3q2aDPN2GKO/GwYcvoXkJEHV9azRr6Uye+dVya49pu6g43fs+N01Mjutn+7bY3LzRdn5q2/FRawU4G2QoAqwlWvdkvvBaOGA02mnEUzdnChSxt0D4Nyxg+LJZxM6FyG986LtoyoanbjFi/+9AMrL2PMZ/ObW9esoznpi0/lVawk0G2AsBqfreM3wyWNROqOuGw5kF0K7l0wIUGIf2kfXPm1DFt9SM7HdP6e5a2BQ/mDDXr9/vdsXVcaslbiHzNhmR3m8nlC63vnnst27SdrdIKdjKYl5E4ceKr45ss4+nLmoleyjqse5Dvv7aWEuYeULSMRkVrGtnJQ7smQIvUrWRx5FQ5ORNRs+ZQro6O/15ufa3j8bZMLxXiNroti2m9yzltZ+vNvIzHxHHiALAab9W7ry5SP11XpTXGbPpTx3D2ZnPvSqPm7mU2DLvtzREd0yemLT+VVrCTQbYCwGqwjPdQaTXrXq3jdnNvXOdvOzZcz3u5jcpiN/F3+W2HM9OWn0or2MkgWwFgNYksIzpYpdWslNtCVFrBTgbZCgCroeq9h0qrWSm3hai0gp0MshUAVkPVew+VVrNSbgtRaQU7GWQrAKyGqvceKq1mpdwWotIKdjLIVgBYDVXvPVRazUq5LUSlFexkMC8jceLEV8ffSqF7KKtydXT8jWUsQ2/mZTwmjhMHgNVQ9d5D78IaYyi3hai0gp0MshUAVkPVew+VVrOe3qaLkunssnZPyFYAWM0by3gLlVazUm4LUWkFOxlkKwCshqr3HiqtZqXcFqLSCnYyyFYAWA1V7z1UWs1KuS1EpRXsZJCtALAaqt57qLSalXJbiEor2MkgWwFgNVS991BpNSvlthCVVrCTwbyMxIkTXx2n6r2H3szLuJv+mkoppZR6NN35v2zhejMv4zFxnDgArAbLeA+V1hhzXLntmoeqP9/vv2/7VNWrO/uXLVylFexkkK0AsJrTJ11De+nsopSUt88ydq9qk8/71HPj4l9Tqbo93zaVrNIKdjLIVgAAKIIoy9i9qurV1EqpZ+vEu/lbpdRoDc2Wxa55VM3f6bapZGEZD4JsBQCAIoi1jJMXFC2j4xRtj9g+h05qdJKwjAdBtgIAQBE4lvEzNhfOVPXTton6ZzfiWsat3dxoq7CMB0G2AgBAEcR3TG+yjLQyni0s40GQrQAAUAS/WEb1bL//vv2YaI9l5F3G3IRlPAjmZSROnDhx4kXEV1vG3inqHdbyloyYzktv5mU8Jo4TBwCAIvBaxs1iXsasRCvjQZCtAABQBMdZRlZ/yUpYxoMgWwEAoAiOtIwoI2EZD4JsBQCAIsAyFiIs40GQrQAAUARYxkKEZTwIshUAAIoAy1iIsIwHQbYCAEARYBkLEZbxIJiXkThx4sSJFxHHMhYi5mU8KI4TBwCAIngrhQrR2WXtnpCtAAAAALAAlhEAAAAAFsAyAgAAAMACWEYAAAAAWADLCAAAAAALYBkBAAAAYAHmZSROnDhx4sSJEyfOvIwAAAAAsA0sIwAAAAAsgGUEAAAAgAWwjAAAAACwAJYRAAAAABbAMgIAAADAAlhGAAAAAFiAeRmJEydOnDhx4sSJMy8jAAAAAGwDywgAAAAAC2AZAQAAAGABLCMAAAAALIBlBAAAAIAFsIwAAAAAsMD/rLZjv+L3TywAAAAASUVORK5CYII=" alt="" />

请求结果的交付是通过ResponseDelivery接口完成的,它有一个实现类ExecutorDelivery, 主要有postResponse()与postError()两个方法,分别在请求成功或失败时将结果提交给请求发起者。

1. 首先,在NetworkDispatcher的run()方法中,当服务器返回响应并解析完后,会调用mDelivery.postResponse(request, response);来提交请求响应。

  @Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Request<?> request;
while (true) {
try {
// Take a request from the queue.
request = mQueue.take();
} catch (InterruptedException e) {
// We may have been interrupted because it was time to quit.
if (mQuit) {
return;
}
continue;
} try {
request.addMarker("network-queue-take"); // If the request was cancelled already, do not perform the
// network request.
if (request.isCanceled()) {
request.finish("network-discard-cancelled");
continue;
} addTrafficStatsTag(request); // Perform the network request.
NetworkResponse networkResponse = mNetwork.performRequest(request);
request.addMarker("network-http-complete"); // If the server returned 304 AND we delivered a response already,
// we're done -- don't deliver a second identical response.
if (networkResponse.notModified && request.hasHadResponseDelivered()) {
request.finish("not-modified");
continue;
} // Parse the response here on the worker thread.
Response<?> response = request.parseNetworkResponse(networkResponse);
request.addMarker("network-parse-complete"); // Write to cache if applicable.
// TODO: Only update cache metadata instead of entire record for 304s.
if (request.shouldCache() && response.cacheEntry != null) {
mCache.put(request.getCacheKey(), response.cacheEntry);
request.addMarker("network-cache-written");
} // Post the response back.
request.markDelivered();
mDelivery.postResponse(request, response);
} catch (VolleyError volleyError) {
parseAndDeliverNetworkError(request, volleyError);
} catch (Exception e) {
VolleyLog.e(e, "Unhandled exception %s", e.toString());
mDelivery.postError(request, new VolleyError(e));
}
}
}

2. 看ExecutorDelivery中postResponse()方法的具体实现。其中mResponsePoster是一个Executor。每post一个response,都会调用ResponseDeliveryRunnable的run()方法。在这个run()方法中,会通过mRequest.deliverResponse(mResponse.result)来传递response的result,这个result其实就是已经解析好的响应结果,比如一个表示处理结果的字符串或一个User对象。

 @Override
public void postResponse(Request<?> request, Response<?> response) {
postResponse(request, response, null);
} @Override
public void postResponse(Request<?> request, Response<?> response, Runnable runnable) {
request.markDelivered();
request.addMarker("post-response");
mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable));
} /**
* A Runnable used for delivering network responses to a listener on the
* main thread.
*/
@SuppressWarnings("rawtypes")
private class ResponseDeliveryRunnable implements Runnable {
private final Request mRequest;
private final Response mResponse;
private final Runnable mRunnable; public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) {
mRequest = request;
mResponse = response;
mRunnable = runnable;
} @SuppressWarnings("unchecked")
@Override
public void run() {
// If this request has canceled, finish it and don't deliver.
if (mRequest.isCanceled()) {
mRequest.finish("canceled-at-delivery");
return;
} 38 // Deliver a normal response or error, depending.
39 if (mResponse.isSuccess()) {
40 mRequest.deliverResponse(mResponse.result);
41 } else {
42 mRequest.deliverError(mResponse.error);
43 } // If this is an intermediate response, add a marker, otherwise we're done
// and the request can be finished.
if (mResponse.intermediate) {
mRequest.addMarker("intermediate-response");
} else {
mRequest.finish("done");
} // If we have been provided a post-delivery runnable, run it.
if (mRunnable != null) {
mRunnable.run();
}
}
}

3. 既然是通过Request的deliverResponse()来传递响应结果,就来看下这个方法, 第二篇中已经知道这个方法是个抽象函数,由它子类来实现。以第一篇中的MyGsonRequest为例,其实现很简单,就是调用了mListener的onResponse方法。

 @Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}

这个mListener就是在主线程实例化MyGsonRequest的时候,传过来的一个Response.Listener<T>实例,这是MyGsonRequest的构造函数:

 public MyGsonRequest(int method
, String url
, Object requestBody
, Class<T> responseClass
, Listener<T> listener
, ErrorListener errorListener) { super(method, url, errorListener);
this.mRequestBody = requestBody;
this.mResponseClass = responseClass;
this.mListener = listener;
mGson = new Gson(); }

这里mListener也就是第一篇中在主线程中通过createRegisterSuccessListener函数返回的监听器实例,如下代码所示。  所以最终会调到这里的onResponse()方法,来做一些更新UI或提示用户请求成功之类的操作。请求失败时,响应错误结果的提交与之类似。这样,Volley就完成了响应结果的交付。

 private Listener<String> createRegisterSuccessListener() {
return new Listener<String>() {
@Override
public void onResponse(String response) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
Toast.makeText(
RegisterActivity.this,
getString(R.string.msg_register_success),
Toast.LENGTH_SHORT).show(); }
};
}

这里还有一个问题, 因为更新UI的操作只能在主线程中进行,那么ResponseDeliveryRunnable的run()方法不能再新起一个线程来执行,而应该在主线程中执行,这个是如何做到的?

其实还是用的Handler,Looper,MessageQueue的那套机制。 在Volley初始化一个RequestQueue的时候,会调用RequestQueue的如下构造函数,它构建了一个ExecutorDelivery对象,并把一个与主线程的Looper关联的一个Handler,

 public RequestQueue(Cache cache, Network network, int threadPoolSize) {
this(cache, network, threadPoolSize,
new ExecutorDelivery(new Handler(Looper.getMainLooper())));
}

然后再看下ExecutorDelivery的构造方法, 通过handler的post方法,把ResponseDeliveryRunnable 这个runnable加到了主线程的消息队列中,所以它的run()方法是在主线程中执行的。

     public ExecutorDelivery(final Handler handler) {
// Make an Executor that just wraps the handler.
mResponsePoster = new Executor() {
@Override
public void execute(Runnable command) {
handler.post(command);
}
};
}

到这里,Volley的源码基本上看完了。 还有一些诸如NetworkImageView控件(这个挺好用,直接可以取代ImageView),以及Cache的一些实现,有时间再具体看看。