简历对应知识点总结--专业技能5

熟练运用多线程、进程、Binder 通信等编程技术,通过源码分析 Binder 原理

一、线程和进程

线程与进程的不同之处

1、起源不同 进程先于线程出现,线程的出现是为了提高CPU的利用,提高程序的运行效率。

2、概念不同 进程是具有独立功能的一个程序运行起来的活动,是系统分配资源和调度的单位;线程是cpu的基本调度单位。

3、内存共享方式不同 进程间不能直接通信,只能通过高级技巧IPC实现,线程间可以直接访问彼此的一些内存。

4、拥有资源不同 线程拥有的资源少于进程。

5、数量不同 一个进程中可以包含有多个线程,至少包含一个线程。

6、开销不同 进程创建、终止时间都比线程要长;同一进程中的线程切换时间也比进程要短。

线程的创建: 继承Thread[或使用匿名内部类New Thread(){}]或者实现Runnable接口

java 复制代码
public class ThreadA extends Thread{
    @Override
    public void run() {
        super.run();
    }
}        



        new Thread(
                new Runnable() {
                    @Override
                    public void run() {

                    }
                }
        ).start();
        //lambda表达式
        new Thread(
                ()->{
                    
                }
        ).start();




public class ThreadA implements Runnable{

    @Override
    public void run() {
        
    }
}

**线程的关闭:**标志位控制、 interrupt()中断机制或stop()方法 (该方法已标记为已废弃)

原理 ‌:通过volatile修饰的布尔变量作为退出标志,线程在循环中定期检查该标志以决定是否终止。

优点:安全可控,避免资源未释放问题。

标志位控制

java 复制代码
public class MyThread extends Thread {

    private volatile boolean running = true;

    public void run() {

        while (running) { /* 任务逻辑 */ }

    }

    public void stopThread() { running = false; }

}

interrupt()中断机制

原理 ‌:调用interrupt()设置线程中断状态,线程需通过isInterrupted()检查或捕获InterruptedException响应中断。

java 复制代码
while (!Thread.interrupted()) { /* 任务逻辑 */ }

stop()方法 (该方法已标记为已废弃)

强制终止线程可能发哦之锁未释放、数据不一致等问题。

线程间通信的方式:

1、Handler机制

java 复制代码
// 工作线程发送消息
new Thread(() -> {
    Message msg = Message.obtain();
    msg.what = 1;
    msg.obj = "Data from worker";
    mainHandler.sendMessage(msg);
}).start();
 
// 主线程Handler
Handler mainHandler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
                String data = (String) msg.obj;
                textView.setText(data);
                break;
        }
    }
};

2、AsyncTask(该方式已标记为已废弃)

Kotlin 复制代码
object : AsyncTask<Void, Void, String>() {
    override fun doInBackground(vararg params: Void): String {
        return "计算结果" // 在子线程执行
    }
 
    override fun onPostExecute(result: String) {
        textView.text = result // 在主线程执行
    }
}.execute()

3、BlockingQueue(阻塞队列)实现生产者-消费者

java 复制代码
val queue = LinkedBlockingQueue<String>()
 
// 生产者线程
thread {
    queue.put("数据1")
}
 
// 消费者线程
thread {
    val data = queue.take() // 阻塞获取
    println(data)
}

4、Executor框架 + Activity.runOnUiThread

java 复制代码
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
    // 后台工作
    final String result = doWork();
    
    // 返回主线程
    runOnUiThread(() -> {
        textView.setText(result);
    });
});

5、RxJava

6、EventBus

7、Kotlin协程

Kotlin 复制代码
// 在ViewModel或LifecycleOwner中
lifecycleScope.launch {
    // 主线程执行
    val deferred = async(Dispatchers.IO) {
        // IO线程执行耗时操作
        fetchDataFromNetwork()
    }
    
    // 自动切换回主线程
    val result = deferred.await()
    updateUI(result)
}

8、LiveData

java 复制代码
// ViewModel中
MutableLiveData<String> data = new MutableLiveData<>();
 
// 观察者
data.observe(this, new Observer<String>() {
    @Override
    public void onChanged(String value) {
        // UI线程自动更新
        textView.setText(value);
    }
});
 
// 工作线程更新
String result = fetchData();
data.postValue(result); // 非UI线程使用postValue

进程间通信的方式:

1、AIDL

2、Binder机制

3、ContentProvider

4、Service

5、广播(Broadcast)

6、Intent

7、Socket

二、Binder机制

https://blog.csdn.net/qq_34707150/article/details/148492748?spm=1011.2415.3001.5331

相关推荐
网络安全许木2 小时前
自学渗透测试(1~6天工具使用的回温)
android
匆忙拥挤repeat2 小时前
Android Compose 状态保存的API总结
android
BLUcoding3 小时前
Android 生命周期详解
android
Swift社区3 小时前
鸿蒙 vs iOS / Android:谁更适合 AI?
android·ios·harmonyos
冬奇Lab3 小时前
硬件加速与 OMX/Codec2:解密编解码器的底层世界
android·音视频开发·视频编码
亘元有量-流量变现3 小时前
ASO优化全流程实操指南:从基础到迭代,精准提升App曝光与转化
android·ios·harmonyos·aso优化·方糖试玩
私人珍藏库4 小时前
【Android】GameNative 0.9.0 [特殊字符] 手机畅玩Steam游戏
android·游戏·智能手机·app·工具·软件·多功能
诸神黄昏EX4 小时前
Android Safety 系列专题【篇七:Android AVF机制】
android
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.5 小时前
MySQL 主从架构中的使用技巧及优化
android·mysql·架构