多进程

作者: timber_wu | 来源:发表于2016-09-12 23:14 被阅读23次

    进程与多进程是什么东东

    • 什么是进程?
      进程是一个活动,是线程的容器。可以想像成工厂里的车间,每个车间进行不同的活动。
    • 什么是多进程?
      多进程就是多个不同的车间
    • 什么时候使用多进程?
      当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
    • 对象性能

    重构获得模式

    • 好的设计---应对变化,提高复用
    • 设计模式的是“寻求变化点”,然后在变化点处应用设计模式

    相关文章

      网友评论

          本文标题:多进程

          本文链接:https://www.haomeiwen.com/subject/dpxmettx.html