进程与多进程是什么东东
- 什么是进程?
进程是一个活动,是线程的容器。可以想像成工厂里的车间,每个车间进行不同的活动。 - 什么是多进程?
多进程就是多个不同的车间 - 什么时候使用多进程?
当APP需要使用很大的内存而超过进程的内存限制值时,可以通过开辟多个进程来达到占用更大内存的目的。 - 进程的创建?
只需在Mainfest中在你需要的四大组件中加上
android:prcocess="进程名(一般为包名)” - 进程的等级(等级越高越不容易被系统回收)
前台进程
可见进程
服务进程
后台进程
空进程
多进程
- 为什么要使用多进程?
可以使APP更稳定,占用更多的内存。 - 如何使用多进程?
-使用多进程需要注意哪些地方?
进程间内存的不可见性
跨进程不能进行类型强转
多进程间的通信IPC
- IPC(interprocess communication)
- 为什么需要?
内存不共享 - 如何通信
系统实现
Messenger --利用Handler
AIDL:Android Interface definition language
在APP下创建AIDLfile文件写入如下代码
// IMyAidlInterface.aidlpackage com.geekband.Test01;
// Declare any non-default types here with import statements
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString);
String getName(String nickName);
}
通过Terminal实现,然后
public class AIDLActivity extends Activity {
ServiceConnection mServiceConnection = new ServiceConnection() {
@Override public void onServiceConnected(ComponentName name, IBinder service) {
mIMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
private IMyAidlInterface mIMyAidlInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aidl);
findViewById(R.id.button_aidl).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mIMyAidlInterface != null){
try {
String name = mIMyAidlInterface.getName("nick_know_maco");
Toast.makeText(AIDLActivity.this, name + "", Toast.LENGTH_LONG).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
});
bindService(new Intent(this, AIDLService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
}
}
创建Service类
public class AIDLService extends Service {
IMyAidlInterface.Stub mStub = new IMyAidlInterface.Stub(){
@Override
public void basicTypes(int anInt, long aLong,boolean aBoolean,
float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public String getName(String nickName) throws RemoteException {
return nickName + "aidl_hahaha";
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {return mStub; }
}
从封装变化 角度 对模式分类
- 组件协作
Template Method
Strategy
Observer/Event - 单一职责
Decorator
Bridge - 对象创建:
Factory Method
Abstract Factory
Prototype - 对象性能
重构获得模式
- 好的设计---应对变化,提高复用
- 设计模式的是“寻求变化点”,然后在变化点处应用设计模式