Android Activity 知识点全面总结

来源:互联网 发布:高性价比液晶电视 知乎 编辑:程序博客网 时间:2024/05/04 16:19

转载请标明出处:
http://blog.csdn.net/tyzlmjj/article/details/47375469
本文出自:【M家杰的博客】

概述

android四大组件之一的Activity一般是初学者最先认识的组件,既熟悉也陌生。


生命周期

官方Activity生命周期图

onResume():在此方法之后Activity才正式进入用户的视线(可视状态)。
onPause():当跳转到别的页面,Activity一般将进入后台执行此方法。
onStop():当Activity长时间处于后台时调用。
onDestroy():当Activity要被销毁时调用。
onRestart():当Activity处于后台,且未被回收时,重新回到此Activity调用。

当Activity处于后台,且系统需要更多内存时,Activity将被回收,当想回到此Activity时会重构,从onCreate()开始重来。

最常用的生命周期一般是onCreate()和onPause()。在onCreate()中初始化Activity,在onPause()中处理Activity被切换到后台的操作。在实际操作中,有时会出现onStop()和onDestroy()没有被调用的特殊情况,写在其中的方法当然也无法执行,这种情况下onPause()就显尤为重要了。

  • AActivity –>启动 BActivity 生命周期变化:
A:onPause()---> B:onCreate()-->B:onStart()-->B:onResume()-->A:onStop()
  • BActivity 点击返回键 生命周期变化:
B:onPause()-->A:onRestart()-->A:onStart()-->A:onResume()-->B:onStop()-->B:onDestroy()
  • 横竖屏切换 生命周期:
onPause()-->onSaveInstanceState-->onStop()-->onDestroy()-->onCreate()-->onStart()-->onResume

Activity启动方式

直接启动

Intent intent = new Intent();ComponentName componentName = new ComponentName(this, SecondActivity.class);intent.setComponent(componentName );startActivity( intent);

匿名启动

1.在XML中设置活动

<activity android:name=".SecondActivity" >     <intent-filter>          <action android:name="活动名称" />          <category android:name ="android.intent.category.DEFAULT"/><!--用于指定当前动作(Action)被执行的环境  -->     </intent-filter></activity>

2.启动活动

Intent intent = new Intent();intent.setAction( "活动名称");startActivity( intent);

数据传递

传递Object对象

1.创建可序列化模型

class User implements Serializable{    private String name;    private String ID;    public User(String name, String iD) {        this.name = name;        ID = iD;    }    @Override    public String toString() {        return "[name:"+name+" ID:"+ID+"]";    }}

2.发送数据

Intent intent = new Intent(MainActivity.this,SecondActivity.class);Bundle bundle = new Bundle();User user = new User("MJJ","007");bundle.putSerializable("user", user);intent.putExtras(bundle);startActivity(intent);

3.接收数据

User user = (User) getIntent().getSerializableExtra("user");

传递Bitmap等对象

1.发送数据

bundle.putParcelable("bitmap",bitmap);

2.接收数据

Bitmap bitmap = getIntent().getParcelableExtra("bitmap");

异常

传递大数据时会出现异常TransactionToolargeException
所以不要传递过大的数据


Task & Back Tack

由同一个应用启动的Activity默认都在同一个任务栈中(Task)
任务栈的形式和学习C语言的栈是一样的遵循后进先出的原则,看图很好理解

官方任务栈示例图


启动模式

android:launchMode

standard(默认)

默认创建新的实例,可以创建多个同名的Activity实例

singleTop

假设有A–>B–>C–>D四个Activity, D为栈顶
- 当D启动自己时,不会创建新的Activity,会调用onNewIntent()方法
- 当D启动别的Activity时,任然会创建新的Activity
可以理解为只有栈顶元素是单例的

singleTask

单例,不可创建重复的Activity
- 当Activity已经存在,调用onNewIntent()方法,同时在想启动的Activity之前的栈内Activity都会被销毁
- 不存在,则创建新的

singleInstance

跟singleTask类似,也为单实例,唯一的区别在于启动的Activity位于不同的Task(栈)中

0 0
原创粉丝点击