Android(安卓)学习记录-网络请求
16lz
2021-12-31
网络服务
Apache HTTP Client
bug少,但是占内存大。
HttpURLConnection
轻巧,android方便使用,一般推荐这个。
使用网络需要加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在maniest 文件中加上。
如果UI线程处理所有事件,会阻塞程序,导致挂起状态,如网络请求或者数据库查询,
因此Android 的单线程模式必须遵守两条规则:
- 不要阻塞 UI 线程
- 不要在 UI 线程之外访问 Android UI 工具包
public void onClick(View v) { new Thread(new Runnable() { public void run() { Bitmap b = loadImageFromNetwork("http://example.com/image.png"); mImageView.setImageBitmap(b); } }).start();}违反了规则2,UI线程外访问UI工具包,imageView。
为解决此问题,Android 提供了几种途径来从其他线程访问 UI 线程。以下列出了几种有用的方法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
但是,随着操作日趋复杂,这类代码也会变得复杂且难以维护。 要通过工作线程处理更复杂的交互,可以考虑在工作线程中使用 Handler 处理来自 UI 线程的消息。当然,最好的解决方案或许是扩展 AsyncTask 类,此类简化了与 UI 进行交互所需执行的工作线程任务。
使用 AsyncTask
AsyncTask 允许对用户界面执行异步操作。它会先阻塞工作线程中的操作,然后在 UI 线程中发布结果,而无需您亲自处理线程和/或处理程序。
三个参数
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。
要使用它,必须创建 AsyncTask 子类并实现 doInBackground() 回调方法,该方法将在后台线程池中运行。要更新 UI,必须实现 onPostExecute() 以传递 doInBackground() 返回的结果并在 UI 线程中运行,这样,您即可安全更新 UI。稍后,您可以通过从 UI 线程调用 execute() 来运行任务。
更多相关文章
- Android(安卓)异步加载解决方案
- Android(安卓)开发艺术探索笔记(十五) 之 Android(安卓)的线程和线
- Android的异步任务AsyncTask
- Android处理异步耗时任务,AsyncTask使用教程
- ASM (Android(安卓)Screen Monitor) Android真机抓屏
- android 进程和线程
- 命令行下创建 Android(安卓)工程,用 Ant 进行编译部署
- Android(安卓)-- Looper.prepare()和Looper.loop() —深入版
- Android《第三章:AIDL与Messenger》