Activity

一、activity的定义
activity是应用程序的一个组件,他提供一个屏幕用于应用程序和用户之间的交互。

二、activity的生命周期
onCreate()——当活动首次创建时调用,一般在这进行初始化工作,初始化数据,视图等;
onStart()——当活动对用户可见时调用,可见但是不可以交互;
onResume()——活动对用户完全可见并且可以交互;
onPause()——当前活动被暂停(可以是可见的);
onStop()——活动不再对用户可见;
onDestroy()——活动被销毁;
onRestart()——在活动被停止(onStop),并且再次启动时调用,之后又进入到onStart();

三、activity的启动方法
一般可以分为显示启动可隐式启动。
显示启动:
1.直接启动class

Intent intent=new Intent();
intent.setClass(this,YourActivity.class);
startActivity(intent);

2.通过包名

Intent intent = new Intent("android.intent.action.MAIN");               intent.setClassName("wy.bzt.com.phonehelper",                       "wy.bzt.com.phonehelper.activity.f4.MyActivity");
                startActivity(intent);

隐式启动:通过指定Action或Action和Data属性启动Activity,如果有多个Activity符合这个启动条件,系统会让用户选择启动那个应用。
在清单文件里面添加

 <intent-filter>
   <action android:name="com.wy.android.MyActivity"/>
   <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

之后再activity中调用:

 Intent intent = new Intent("com.wy.android.MyActivity");
                startActivity(intent);

四、activity的启动模式
activity的启动模式一共有4种,在清单文件中配置:android:launchMode=”standard|singleTask|singleInstance|singleTop”其中所需要的一种即可。
1.standard
默认启动模式,每次启动Activity时都会创建Activity,并放入当前任务栈中,可以存在多个相同activity实例;

2.singleTop
如果当前activity已经存在,并且在当前任务栈顶,则重用当前activity;如果不在栈顶,则创建新的activity实例;

3.singleTask
如果目标activity已有实例,则重用此activity,并且调用activity的onNewIntent()方法,如果此实例不在任务栈顶,会将此activity提至栈顶,他上面的activity会被移除;没有实例就创建新的实例。

4.singleInstance
在一个新的任务栈中创建目标activity。

注:onNewIntent()非常好用,Activity第一启动的时候执行onCreate()—->onStart()—->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()—->onResart()——>onStart()—–>onResume()。
当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //setIntent(intent);需要的时候设置
    }

五、activity之间的信息传递
1.通过intent/Bundle
跳转时往里面添加信息,在目标activity中取得信息。可以传递的信息有多种:Intent/Bundle支持传递基本类型的数据和基本类型的数组数据,以及String/CharSequence类型的数据和String/CharSequence类型的数组数据。序列化的对象也可以传递。序列化对象,只要在数据类型中实现Parcelable接口或是Serializable接口。

2.通过全局变量
继承Application创建实例,可以在跳转时改变其中的变量,在目标activity中取得此变量的值。

3.剪切板传递(不熟悉)

六、横竖屏切换时activity的生命周期
1.不设置Activity的android:configChanges,会重新执行生命周期,切换横屏时,onPause()>onStop()>onDestroy()>onCreate>onStart>onResume;在切换竖屏时,onPause()>onStop()>onDestroy()>onCreate>onStart>onResume;
2. android:configChanges=”keyboardHidden|orientation|screenSize”之后切换时,不会重新调用生命周期,只会调用onConfigurationChanged方法。

七、保持横屏或者竖屏的方法:
对应的activiy中配置:android:screenOrientation=”landscape”(横屏,portrait是竖屏);

八、保存activity的状态
有时候activity被回收了,想保存activity中的一些值,则可以重写

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

重写此方法,将需要保存的值保存到outState中,在

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_behavior);
    }

判断savedInstanceState是否为null,不是,就去里面取值即可。

九、将一个activity设置成窗口形式
在清单文件中:

 <activity android:name=".MainActivityB"
             android:theme="@android:style/Theme.Dialog"/>

更多的设置可以在style文件中设置主题style。

十、如何退出Activity?如何安全退出已调用多个Activity的Application?

1.退出当前activity,按返回键或者在代码中调用finish()方法即可;
2.关闭多个activity,退出程序,常用的做法是创建一个基类activity,在里面创建一个装activity的集合,其他的activity继承基类,每打开一个activity,就将其添加到基类的集合中,关闭时,循环finish掉集合中的activity即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值