Android 线程学习(一)

Android 线程学习(一)

/*
Service是Android中实现程序后台运行的解决方案,它非常适合执行那些不需要和后台交互,而且还要求长期运行的任务
Service的运行不依赖任何用户界面,即使程序被切换到后台
或者用户打开了另外一个应用程序,Service任然能够保持正常运行
Service并不是运行在一个独立的进程当中的,而是依赖于创建Service时所在的应用程序进程。当某个应用程序进程被杀掉时,
所有的依赖该进程的Service也会停止运行
实际上Service并不会自动开启线程,所有的代码都是默认运行在主线程当中,也就是说我们需要在Service内部手动创建子线程
并在这里执行具体的任务,否则就有可能出现主线程被阻塞的情况
多线程编程
当我们需要执行一些耗时操作比如发送一条网络请求,考虑到网速等原因,服务器未必能够立刻响应我们的请求,如果不将这类操作
放在子线程运行,就会导致主线程被阻塞
 */
class MainActivity : AppCompatActivity() {

    private lateinit var change : Button
    private lateinit var text : TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        change = findViewById(R.id.btn_change)
        text = findViewById(R.id.tv_hello)
        change.setOnClickListener {
/*            thread {
                text.text = "Nice to meet you"
            }*/
            Thread {
                text.text = "Nice to meet you"     //原本程序在子线程更新Ui操作也不会崩
                //it.requestLayout()    加了这句程序会崩溃
                it.invalidate()         //加了这句就不会
            }.start()

        }
    }
/*
实际上,就是只要你改view,不触发checkThread()就没事

而TextView的宽高不改变,也不会去触发requestLayout(),
修改背景也同样.不会触发view的位置大小改变.

当然.这种情况.不是每个版本的android都有用.
还是要规范的去主线程更新UI.哈哈
*/

/*    class MyThread : Runnable {
        override fun run() {
            //编写具体的逻辑
        }
    }*/


}

/*
    class MyThread : Thread() {
        override fun run() {
            super.run()
            //编写具体的逻辑
        }
    }
    MyThread().start()
    //使用继承的方式耦合性有点高,会更多实现Runnable接口方式来定义一个线程
    class MyThread : Runnable {
        override fun run() {
            //编写具体的逻辑
        }
    }
    val mythread = MyThread()
    Thread(mythread).start()
    //不想专门在定义一个类去实现接口,也可以使用Lambda方式
    Thread {
        //编写具体的逻辑
    }.start()
    //Kotlin内置的顶层函数
    thread {
        //编写具体的逻辑
    }
 */

子线程更新U操作程序不会崩溃的原文解释链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值