美文网首页Android开发程序员Kotlin编程
45. (android开发)主线程以外执行网络请求

45. (android开发)主线程以外执行网络请求

作者: 厚土火焱 | 来源:发表于2017-12-13 13:54 被阅读252次

在 kotlin 开发 android 应用的时候,我们知道,HTTP请求被不允许在主线程中执行,否则会抛出异常。这样的设计是因为,阻塞UI线程是一个非常差的体验。所以,我们使用 doAsync 来处理异步任务。
打开 android studio 新建一个项目,建立一个 activity,这里命名这个 activity 为 freeTestActivity。
一般默认建立的 AS 项目,默认的 activity 名字是 MainActivity。为了简单直接运行 freeTestActivity,我们修改一下 AndroidMainifest.xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cofox.mykt.mykfa">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">

        </activity>
        <activity android:name=".freeTestActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>

</manifest>

这样 freeTestActivity 就是默认 activity 了。
注意前面的 uses-permission 标签。这里申请了网络权限。以确保告知操作系统,这个应用需要网络访问。
我们的网络请求,就设定为访问“百度”,然后把请求回来的信息使用提示框显示一下。
那么在 freeeActivity.kt 文件中的 onCreate 函数中增加如下代码

        doAsync {
            var str = URL("http://www.baidu.com").readText()
                if ((str == null)||(str.length == 0)){
                    str = URL("https://www.baidu.com").readText()
                }
            uiThread { toast(str) }
        }

这里的 toast 是一个扩展函数。在 class freeTestActivity 内实现。

    fun Context.toast(message:CharSequence, duration: Int = Toast.LENGTH_LONG){
        Toast.makeText(this, message, duration).show()
    }
2017-12-13-11-19-33-556_com.cofox.mykt.mykfa.png

相关文章

  • 45. (android开发)主线程以外执行网络请求

    在 kotlin 开发 android 应用的时候,我们知道,HTTP请求被不允许在主线程中执行,否则会抛出异常。...

  • 简单介绍下LiveData

    引子—— 在Android开发中,为了避免ANR,通常耗时的操作(网络请求、数据库操作)都会在子线程中执行,执行完...

  • OkHttp的一些东西

    1.同步请求必须在子线程中执行,因为在Android4.0之后主线程中不允许网络请求,究其根本是因为同步网络请求会...

  • JavaScript 执行机制

    五个线程 js引擎线程: 执行js代码GUI线程: 绘制用户界面http网络请求线程: 处理网络请求, 等请求返回...

  • Kotlin笔记(65) — 异步线程的实现:doAsync 和

    前言 在Android开发过程中,我们经常会遇到一种情景,那就是需要在一个线程中去执行耗时操作,如网络请求,文件读...

  • Retrofit+RxJava网络框架学习

    一、为什么要用Retrofit+RxJava网络框架在Android开发中,把网络请求这样的耗时操作放在主线程中执...

  • iOS-多线程中的信号量

    网络请求的任务是提交给子线程异步处理了,对于主线程网络请求这样的任务也就快速执行完毕了,但是对于主线程网络请求是一...

  • 深度解析多线程带来的Android性能优化原理

    Android 开发中多线程的必要性; Android 开发中,许多操作都需要由 主线程(UI 线程)来执行,比如...

  • 从源码角度深入理解OKHttp3

    在日常开发中网络请求是很常见的功能。OkHttp作为Android开发中最常用的网络请求框架,在Android开发...

  • Android线程池浅析

    引言 在Android开发中,只要是耗时的操作都需要开启一个线程来执行。例如网络访问必须放到子线程中执行,否则会抛...

网友评论

    本文标题:45. (android开发)主线程以外执行网络请求

    本文链接:https://www.haomeiwen.com/subject/eeraixtx.html