美文网首页
IPC多进程模式学习笔记

IPC多进程模式学习笔记

作者: android_noob | 来源:发表于2018-03-24 08:52 被阅读0次

    进程通信:Binder、文件共享、AIDL、Messenger、ContentProvider、Soket

    在正式介绍进程见通信之前,我们必须要理解Android中的多进程模式。首先,在Android中使用多进程只有一种方法那就是给四大组件设置android:process属性,我们可以轻易地开启多进程模式(还有一种多进程方法,那就是通过JNI在native层去fork一个新的进程,但是这种方法属于特殊情况,也不是常用的创建多进程的方式,因此我们暂时不考虑这种方式)。

    1.Activity设置进程

    运行demo跑起来之后,可以通过 adb shell ps | 应用包名         如图

    三个进程分别为:13423、13805、14008 可以理解为三个应用程序,为什么我要这样说呢?下面请看代码

    1.首先创建一个UserManager类

    public class UserManager {

          public static int sUserId =1;

    }

    2.在MainActivity中的OnCreate方法中重新进行 sUserId变量进行赋值,然后跳转到SecondActivity界面中重新打印 sUserId

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        UserManager.sUserId =2;

        Log.e("sUserId"," MainActivity "+UserManager.sUserId+"  ");

    }

    public void second(View view){

        startActivity(new Intent(this,SecondActivity.class));

    }

    可以看到sUserId变量已经修改成2

    接下跳转到SecondActivity界面当中在打印一遍sUserId变量看看会输出什么请看代码

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        Log.e("sUserId"," SecondActivity "+UserManager.sUserId+"  ");

    }

    public void third(View view){

    startActivity(new Intent(this,ThirdActivity.class));

    }

    可以看到 sUserId 打印结果为1

    上述问题出现的原因是MainActivity和SecondActivity都是运行在单独的一个进程中,我们知道Android为每一个应用分配了一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,可以理解成MainActivity进程中有一个UserManager类,SecondActivity进程中也有一个UserManager类,在MainActivity 进程中只会修改当前进程中地址指向sUserId变量,修改不了SecondActivity进程中sUserId变量。

    相关文章

      网友评论

          本文标题:IPC多进程模式学习笔记

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