网络服务

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 的单线程模式必须遵守两条规则:

  1. 不要阻塞 UI 线程
  2. 不要在 UI 线程之外访问 Android UI 工具包
例如,以下代码演示了一个点击侦听器从单独的线程下载图像并将其显示在 ImageView 中:

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() 来运行任务。


更多相关文章

  1. Android(安卓)异步加载解决方案
  2. Android(安卓)开发艺术探索笔记(十五) 之 Android(安卓)的线程和线
  3. Android的异步任务AsyncTask
  4. Android处理异步耗时任务,AsyncTask使用教程
  5. ASM (Android(安卓)Screen Monitor) Android真机抓屏
  6. android 进程和线程
  7. 命令行下创建 Android(安卓)工程,用 Ant 进行编译部署
  8. Android(安卓)-- Looper.prepare()和Looper.loop() —深入版
  9. Android《第三章:AIDL与Messenger》

随机推荐

  1. 软测经典面试题(四)
  2. 报表生成器FastReport .Net如何使用FastR
  3. 高企认证对企业有哪些好处呢?
  4. 为什么使用Tailwind Css框架?
  5. Apache Hivemall:可运行在Apache Hive, S
  6. js第一课 引入方式 参数 函数
  7. 物联网“新篇章”:如何将机器学习引入边缘
  8. 如何使用 Python 和 BeautifulSoup 爬取
  9. 深入理解Kafka Connect:转换器和序列化
  10. 0-10V转0-10V隔离器,信号转换器,信号分配模