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

安卓的组件的可以指定运行在不同的进程之中,而一个进程只能拥有一个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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值