安卓中,进程与Application之间的关系 &&《老罗安卓源码分析》 笔记

来源:互联网 发布:淘宝女士棉袄 编辑:程序博客网 时间:2024/05/16 08:51

安卓的组件的可以指定运行在不同的进程之中,而一个进程只能拥有一个Application。

下面进行测试。

import android.app.Application;import android.util.Log;/** * Created by Administrator on 2015/8/15. */public class App extends Application {    public static String str = "string";    @Override    public void onCreate() {        super.onCreate();        Log.d("MyApp", "onCreate()");    }}


新建一个App类,继承Application类,并且有个静态变量str;

新建三个Activity

MainActivity

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.start_btn).setOnClickListener(this);        findViewById(R.id.start_btn1).setOnClickListener(this);        App.str = new String("this is a new string");    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.start_btn:                startActivity(new Intent(this,NewProcessActivity.class));                break;            case R.id.start_btn1:                startActivity(new Intent(this,SameProcessActivity.class));                break;        }    }}

 

NewProcessActivity

import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;/** * Created by Administrator on 2015/8/15. */public class NewProcessActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_new_process);        findViewById(R.id.finish_btn).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Log.d("MyApp", "string is " + App.str);            }        });    }}


最后一个SameProcessActivity


 

import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;/** * Created by Administrator on 2015/8/15. */public class SameProcessActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_new_process);        findViewById(R.id.finish_btn).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Log.d("MyApp", "string is " + App.str);            }        });    }}

manifest文件

<application        android:name=".App"        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme">        <activity            android:name=".MainActivity"            android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".NewProcessActivity"            android:process="com.example.administrator.mulprocesstest.newprocess"></activity>        <activity android:name=".SameProcessActivity"></activity>    </application>

在Manifest文件中指定Activity运行在不同的进程中


接下来查看运行结果

程序第一次启动时,会新建一个App,调用App类的onCreate();

接着我们启动NewProcessActivity

发现又调用了一次onCreate()。接着我们输出App.str;;

在MainActivity中,我们把App.str的值改为"this is a new string"

原字符串为"string"

在NewProcessActivity中,我们输出的结果为

发现App.str的值是没有变化的。

 

综上:每个进程对应一个Application。

 

0 0
原创粉丝点击