为了账号安全,请及时绑定邮箱和手机立即绑定

Android-深入Activity

难度初级
时长 1小时16分
学习人数
综合评分9.63
47人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.6 逻辑清晰
  • singleInstance 这部分再说一下,图示是从MainActivity->FirstActivity->MainActivity->FirstActivity->MainActivity的顺序 (1)启动MainActivity(创建Task1),再启动FirstActivity的函数调用顺序为 MainActivity.onCreate()->MainActivity.onResume()启动FirstActivity MainActivity.onPause()->FirstActivity.onCreate(),同时创建新的Task2,->FirstActivity.onResume() 最后调用MainActivity.onStop() (2)从FirstActivity->MainActivity,函数调用顺序: FirstActivity.onPause()->MainActivity.onCreate(),这时又在Task1中创建了MainActivity的实例,最后调用FirstActivity.onStop() (3)MainActivity->FirstActivity,函数调用顺序: MainActivity.onPause()->FirstActivity.onNewIntent()->FirstActivity.onResume()->MainActivity.onStop() (4)按照这个顺序,一直到创建第三个MainActivity的实例,这个时候如果点击back键。 会先把Task1的MainActivity finish掉,最后finish掉Task2的FirstActivity。
    查看全部
  • Activity启动模式 1. Standard 启动一个activity时系统会创建这个activity的一个实例。一个activity可以被多次实例化,这几个实例可以属于一个task或者属于多个task;一个task可以有多个实例。如果在一个Task中,某activity自己启动自己,就会再次创建一个实例,启动几次创建几个。 2. singleTop 如果一个activity的实例处于栈顶的位置,而且此activity的launchMode为“singleTop”,那么它只能有一个实例在栈顶,即如果它在栈顶自己启动自己将不会创建该activity的实例,而是在原来的实例上调用onNewIntent(),传入一个新的intent。 重新启动该activity的对比: (1)standard:onPause()->onCreate()->onResume() (2)singleTop: onPause()->onNewIntent()->onResume(),而且在调用onNewIntent()收到一个新intent之前,activity会一直paused 3. singleTask 指定launchMode为singleTask的activity只能在Task中存在一个实例。如果它已经存在,再次启动时将会调用它的onNewIntent(),传入intent。除此之外,(重要的是)它还会把自己置于栈顶,并且把其他它之上的activity全部finish()掉。当前要除去最开始栈底的MainActivity。 假设两个activity A、B,B如果已经存在一个实例,且launchMode为singleTask。如果再从A->B,函数调用顺序应该为: A.onPause()->B.onNewIntent()->B.onResume()->A.onStop()->A.onDestory() 4. singleInstance(单实例) 和singleTask很像,不一样的地方在于: (1)第一次启动此activity,将会新创建一个task,此task中只有此一个activity (2)如果已经存在此activity实例,再次启动时,调用onNewIntent(),而不是onCreate(),这一点和singleTask很像
    查看全部
  • 大数据传递
    查看全部
  • launchMode 属性的singleInstance 与singleTask类似,只是singleInstance定义的activity会重新分配一个栈地址 如图所示,main1,2,3是mainactivity在栈中的排放,启动方式Main1->FirstActivity->Main2->FirstActivity->Main3,,, 返回时,Main3->Main2->Main1->FirstActivity
    查看全部
  • <activity android:name="包名.activity" android:process="包名.activity" //开一个新进程 android:launchMode=" " /><activity> lauchMode=1、standard 未指定时即为standard,在此模式下相同的activity可以重复创建 2、singleTop 当d activity处于栈顶的时候如果再启动d本身不会再创建一个新的activity,而是调用onNewIntent()方法,如果d activity不处于栈顶,被别的activity启动的话仍然会在栈中重新创建。 3、singleTask 任务栈中只能存在一次,第二次启动的话就调用onNewIntent()方法 4、singleInstance
    查看全部
  • adb shell dumpsys activity 查看当前activity, 在打印的log信息中Running activities中查看当前打开的activity
    查看全部
  • 通过在Manifest中为activtiy注册信息时添加:process 即可分配不同的进程名; 使用activity的getTaskId()方法可以获得当前应用程序的taskId,同一个应用程序下的不同activity默认情况下的taskId都是相同的;
    查看全部
  • bundle传递数据大于0.5M会抛出传输数据过大异常; 在传输大量数据的时候也有可能抛出TransactionTooLargeException异常,解决办法是减少bundle传输的数据量
    查看全部
  • 传递一个bitmap对象 Intent intent=new Intent(MainActivity.this,SecondActivity.class); Bundle bundle=new Bundle(); Bitmap bitmap=BitmapFactory.decodeResource(getResource(),R.drawable.ic_launcher); bundle.putParcelable("key",bitmap); intent.putExtra(bundle); startActivity(intent); 接收bitmap Intent intent=getIntent(); Bitmap bitmap=intent.getParcelableExtra("key"); imageView.setImageBitmap(bitmap);
    查看全部
  • 传递数据 传入 Intent intent =new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("key","stringValue"); intent,putExtra("key2",Int); startActivity(intent); 取出 Intent intent =getIntent(); intent.getStringExtra("key"); intent.getIntExtra("key2",0); 通过Bundle传递数据 传入 Intent intent=new Intent(MainActivity.this,SecondActivity.class); Bundle bundle=new Bundle(); bundle.putString("key","stringValue"); bundle.putInt("key2",Int); intent.putExtra(bundle); startActivity(intent); 接收同上
    查看全部
  • Activity之间传递数据 1. 传递普通数据 mIntent.putExtra("name", "Hello, xzhang76"); mIntent.putExtra("age", 27); 2. 传递Bundle类型数据 Bundle bundle = new Bundle(); bundle.putString("name", "xzhang76"); bundle.putInt("age", 27); secIntent.putExtras(bundle); 3. 传递一个对象 要将对象封装在Bundle中 Person me = new Person("xzhang76", 27); Bundle bundle = new Bundle(); bundle.putSerializable("person", me); secIntent.putExtras(bundle); 接收的activity中: Person person = (Person) intent.getSerializableExtra("person"); Person这个类中 public class Person implements Serializable 4. 传递一个Bitmap Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); Bundle bundle = new Bundle(); bundle.putParcelable("bitmap", bitmap); secIntent.putExtras(bundle); 接收的activity中 Bitmap bitmap = intent.getParcelableExtra("bitmap"); 5. 注意Bundle对象作为载体传递数据时,数据量很小(<0.5M),否则有如下异常抛出: !!! FAILED BINDER TRANSACTION !!! 也就是说,在Activity之间传递数据时一定要注意数据不能过大。
    查看全部
  • Activity的Task和启动模式
    查看全部
  • FirstActivity: singInstance,MainActivity: standard 启动时:AMainActivity(id:20)_FristActivity(id:30)_BMainActivity(id:20)_FristActivity(id:30,复用newIntent)_CMainActivity(id:20) back时:CMainActivity(id:20)_BMainActivity(id:20)_AMainActivity(id:20)_FristActivity(id:30) 总结:单任务栈可复用,back不可跨任务栈
    查看全部
  • 1. 使用intent传递普通参数————》putExtra 2. 使用bundle(map封装)传普参 3. 使用bundle传实现serializable接口的bean实例,用bundle.putserial……获取getSerializable 4. 使用bundle传递bitmap,可以用bundle.putParcelable……获取getParcelable
    查看全部
  • bundle传递数据大于0.5M会抛出传输数据过大异常; 在传输大量数据的时候也有可能抛出TransactionTooLargeException异常,解决办法是减少bundle传输的数据量
    查看全部

举报

0/150
提交
取消
课程须知
需要学完<<Android-重识Activity>>
老师告诉你能学到什么?
Activity的Task和Back Stack Activity启动模式 Activity之间的数据交换 Activity之间传递大数据的问题

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!