目录
Thread
Android 三种方式开启子线程
第一种方式继承Thread:
class MyThread extends Thread{
@Override
public void run() {
super.run();
//耗时操作
try {
sleep(3000);
String s="世界和平";
Log.i("Thread方式收到的值是:",s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
MyThread myThread=new MyThread();
myThread.start();
第二种方式实现Runnable接口:
class MyRunnable implements Runnable{
@Override
public void run() {
try {
Thread.sleep(3000);
String s="吧啦蹦吧必读蹦";
Log.i("Runnable收到的值是",s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
MyRunnable myRunnable=new MyRunnable();
Thread thread=new Thread(myRunnable);
thread.start();
第三种方式Thread和Runnable结合(常见、推荐):
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
String s="M78星云";
Log.i("接收到的值是:",s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
Handler(句柄)
package com.hp.demo;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.TextView;
/**
* 从服务器接收到用户的昵称,并将昵称设置在textview对应的text属性上
*
* 连接服务器的功能,是属于耗时任务,所以必须放在子线程
*
* 子线程中是没有办法修改页面,借助Handler给主线程传递消息
*
* 主线程接收到消息后,开始执行修改UI
*/
public class MainActivity2 extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
textView=findViewById(R.id.textView);
// 模拟一个连接服务器的过程
new Thread(new Runnable() {
@Override
public void run() {
try {
// 本意是想表达 连接服务器的耗时操作
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 假如从服务器获取到昵称为: