Activity之间的数据传递、启动模式
2016-06-13 18:46
369 查看
Activity之间的数据传递
使用Bundle
Serializable
Person.java
传递bitmap
Bundle不能传递过大的数据
最好小于0.5M (应该是图上那个数据)
反正试了试0.25M可以
大图片也不让传
Activity的Task和启动模式
通过在Manifest中为activtiy注册信息时添加:process 即可分配不同的进程名;
使用activity的getTaskId()方法可以获得当前应用程序的taskId,同一个应用程序下的不同activity默认情况下的taskId都是相同的
adb查看Activity命令
adb shell dumpsys activity
android:launchMode
http://blog.csdn.net/duanliuchang/article/details/51372498
standard (the default mode)
singleTop
singleTask
singleInstance
前提: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
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
相关文章推荐
- Net 通用权限管理系统源码 带数据库设计文档,部署说明文档
- 添加language和region定制不生效问题
- 通过宿主机目录向docker容器传文件
- ODBC驱动程序丢失解决方法
- String常用方法总结
- 一个APP唤醒另一个App,如果这个App没有安装,则提示未安装或立即下载
- MySQL:UNIX_TIMESTAMP函数不走索引问题
- 一位软件工程师的7年总结
- __align(num) 分析
- 最短路<dijk>
- 用Java操作树莓派!pi4j简介与安装
- 一次调戏群友的事件
- TextUtils
- 概率问题的求解 —— 样本空间
- 调试eclipse javaEE所遇问题解决
- ERROR YarnScheduler: Lost executor
- 什么是软件工程?
- ios获取所有相册的视频并播放
- Editplus格式化代码
- oracle基本