安卓学习之《第一行代码3》学习笔记(3)KotLin

        今天又是周末了,回顾这一周,我只要学习了第一行代码的Service这一章节的内容。

一、Service

        在学习之前就知道Service作为安卓的四大组件之一,和activity一样有生命周期、有启动的方式,没有布局。但是对于service的具体用法我是不太清楚的。

        首先,servise适用于那种不需要和用户交互,但是可以长期运行的任务,甚至于它所依赖的应用被切换到后台了,它还是在运行的。这就有关于他的生命周期了。

        对于activity的生命周期,都接触的比较多,了解的也比较多。在Service中,主要调用的是onCreate()、onStartCommand()、onDestory()。当启动服务的时候onCreate()方法将被调用,如果service没有被创建的话、当service已经已经被创建的时候,调用的是onStartCommand(),service需要调用onDestory()销毁。onBind()方法可以使activity和service联系起来。
二、多线程

1.线程的使用,Kotlin

        直接使用lanbda表达式

Thread{
        }.start()
采用更简单的方式

thread{
        }  

2.在子线程更新ui

        安卓中不允许在子线程操作ui,必须在主线程中操作,否则就会出现异常。为了解决这个问题,可以使用,异步消息处理机制

例如使用handler 子线程更新ui

class MainActivity : AppCompatActivity() {

        val updateText = 1

        val handler = object : Handler(Looper.getMaininLooper()) {

                 override fun handleMessage(msg: Message) { 

                         when (msg.what) {

                                updateText -> textView.text = "Nice to meet you"

                        }

                   }

        }

override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        changeTextBtn.setOnClickListener {

                thread {

                        val msg = Message()

                        msg.what = updateText

                        handler.sendMessage(msg) 

                }

        }

    }

}

        在这里主要使用了handle的几个主要方法,handleMessage、Message、handler.sendMessage(msg) ,首先获取Message()对象,msg.what赋值使用sendMessage()发送消息到消息队列中,最后在handleMessage()方法中,接受到消息,这样就可以实现在子线程中修改ui。

        handler主要有message、handler、messagequeue、looper方法
message方法是用来线程传递消息,主要有what arg1 arg2 obj,arg1 主要用来传递整形数据,obj字段用来携带object对象。

 handler 处理者主要用来发送和处理消息,使用sendMessage()、post()方法发送消息。最终会传递到Handler的handlemessage()方法中。

 messagequeue是消息队列。
 looper调用loop()方法,将messagequeue队列的数据传递到handlemessage。

三、泛型的使用

        泛型的优点在于允许不指定类型的情况下编程,这样的代码将会拥有更好的扩展性。经常使用的List<Int>、List<String>就是使用了泛型,这种方式确实好用。

自己可以定义泛型类、泛型方法,但是在使用的时候,就要自己指定类型了。

比如class MyClass{

                fun <T> method(a:T):T{

                        return a

                }

        }

method就是一个泛型方法,类型一般用T表示,他的使用是

val myClass=MyClass()

val a=myClass.method<Int>(123)

kotlin中的泛型还可以限制T的类型修改 fun <T:Number> method(a:T):T,就表示对于类型有了限制,只能是数字类型。​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值