您的位置:首页 > 其它

Activity之间的数据传递、启动模式

2016-06-13 18:46 369 查看
Activity之间的数据传递

intent.putExtra("name", "Lin");
intent.putExtra("age", 13);
startActivity(intent);


Intent intent = getIntent();
if (intent != null) {
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);
textView.setText("name = " + name + "age = " + age);
}


使用Bundle

Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
//        intent.putExtra("name", "Lin");
//        intent.putExtra("age", 13);
Bundle bundle = new Bundle();
bundle.putString("name", "Lin");
bundle.putInt("age", 13);
intent.putExtras(bundle);
startActivity(intent);


Serializable

Person.java

public class Person implements Serializable {

private int age;
private String name;
private String address;

public Person(int age, String name, String address) {
this.age = age;
this.name = name;
this.address = address;
}

@Override
public String toString() {
return "[ name = " + name + " age = " + age + " address = " + address + " ]";
}
}

Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
Person person = new Person(13, "Lin", "canton");
Bundle bundle = new Bundle();
bundle.putSerializable("person", person);
intent.putExtras(bundle);
startActivity(intent);


Intent intent = getIntent();
if (intent != null) {
Person person = (Person) intent.getSerializableExtra("person");
textView.setText(person.toString());


传递bitmap

Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
Bundle bundle = new Bundle();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
bundle.putParcelable("bitmap", bitmap);
//        bundle.putSerializable("person", person);
intent.putExtras(bundle);
startActivity(intent);

if (intent != null) {
Bitmap bitmap = intent.getParcelableExtra("bitmap");
imageView.setImageBitmap(bitmap);


Bundle不能传递过大的数据

Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
Bundle bundle = new Bundle();
int[] data = new int[1024 * 1024 * 8];
bundle.putIntArray("name", data);
intent.putExtras(bundle);
startActivity(intent);

Intent intent = getIntent();
if (intent != null) {
int[] data = intent.getIntArrayExtra("name");
Log.i("Main", "data = " + data);






最好小于0.5M (应该是图上那个数据)

反正试了试0.25M可以

大图片也不让传

Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
Bundle bundle = new Bundle();
Bitmap bitmap = Bitmap.createBitmap(480, 1200, Bitmap.Config.ARGB_8888);
bundle.putParcelable("bitmap", bitmap);
intent.putExtras(bundle);
startActivity(intent);

Intent intent = getIntent();
if (intent != null) {
Bitmap bitmap = intent.getParcelableExtra("bitmap");
imageView.setImageBitmap(bitmap);


Activity的Task和启动模式

通过在Manifest中为activtiy注册信息时添加:process 即可分配不同的进程名;

使用activity的getTaskId()方法可以获得当前应用程序的taskId,同一个应用程序下的不同activity默认情况下的taskId都是相同的

<activity android:name=".FirstActivity" android:process=".FirstActivity" />


Log.i(TAG, "MainActivity taskId " + getTaskId());




adb查看Activity命令

adb shell dumpsys activity



android:launchMode

http://blog.csdn.net/duanliuchang/article/details/51372498

standard (the default mode)

singleTop

singleTask

singleInstance

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i(MainActivity.TAG, "FirstActivity onNewIntent ");
}


前提:ActivityA已经启动过,处于当前应用的Activity堆栈中;

当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法

当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法

当ActivityA的LaunchMode为Standard时,由于每次启动ActivityA都是启动新的实例,和原来启动的没关系,所以不会调用原来ActivityA的onNewIntent方法

来源:http://www.educity.cn/wenda/153321.html

singleInstance

创建一个新的任务栈

两个不同的任务栈

退出一个任务栈里所有的Activity之后才会去退出另一个任务栈中的Activity
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: