进程和线程
进程:
进程是资源分配和调度的独立单位,进程将内存地址空间、程序、数据等资源组织起来,使操作系统容易管理这些资源。
线程:
线程是CPU调度和分派的基本单位,线程必须依赖进程而存活,并和其他线程共享依赖的进程的资源。
区别
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
资源分配给进程,同一进程的所有线程共享该进程的所有资源.但进程间相互独立
线程的划分尺度小于进程,使得多线程程序的并发性高。
每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
使用多进程造成的问题
进程间通信
进程间通信--IPC
1-使用Bundle
四大组件的三大组件(activity,service,receiver)都是支持在intent中传递Bundle数据的
Bundle实现了parcelable
当一个进程中启动另一个进程的activity,service,receiver时,就可以在bundle中附加数据,通过intent传递出去.
2-使用文件共享
两个进程通过读/写同一个文件来交换数据(对文件格式没有要求,双方约定即可)
不建议在进程间使用sharedpreference
3-使用Messager
通过在不同进程中传递message对象,在message中放入我们需要传递的数据,就可以轻松的数据的继承间传递
Messager他的底层实现是AIDL, 是一个轻量级的IPC,它以串行的方式处理客户端发来的消息
4-使用AIDL*
AIDL中只支持方法不支持静态的常量
5-使用ContentProvider
ContentProvider是Android中提供的专门用于不同应用间进行数据共享 的方式.底层实现是binder
6-使用Socket
使用socket要声明权限
INTERNET和ACCESS_NETWORK_STATE
网络连接在子线程中进行
远程service建立一个TCP服务,然后在主界面连接TCP服务,连接上后就可以向服务端发送消息了.
线程间通信
1-使用Handler
常常我们在主线程声明handler—子线程中发送消息,在handlemessage中处理消息.
Handler在哪个线程中,则消息就是发送给哪个线程的
Looper.loop()方法是一个死循环,不断读取MessageQueue里面的消息
2- runOnUiThread(Runnable)
在子线程中直接使用该方法,可以更新UI
3.View.postDelay(Runnable , long)/new Handler().postDelayed(Runnable)
在需要更新UI的地方调用该方法,Runnable对象的方法里,直接操作UI;long是指延迟多少秒