Android小记

Android四大组件之Activity


  1. 在应用程序中,一个Activity就是一个屏幕。
  2. Activity上面能显示一些控件,同时可以监听并处理用户事件并做出响应。
  3. Activity之家通过Intent进行通信。
  4. android中的每一个Activity必须在AndroidMainfest.xml文件中进行注册,否则系统将不识别。
Activity新建
    //AndroidMainfest.xml
    <activity android:name=".MainActivity"></activity>

    //加入以下代码,便是入口Activity(app第一个展示的Activity页面)
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
Activity生命周期
  • Activity生命周期: onCreate() -> onStart() -> OnResume() -> onPause() -> onStop() -> onDestroy()

    • onCreate->Activity对象创建完毕,但是在屏幕不可见。
    • onStart ->Activity在屏幕可见,但是此时没有焦点。
    • onResume->Activity在屏幕可见并且获得焦点。
    • onPause ->Activity在屏幕可见,但是失去焦点。
    • onStop ->Activity已经不可见,但是此时Activity对象仍旧在內存中。
    • onDestroy->Activity对象被系统销毁。
    • onRestart->Activity重新启动,由不可见状态变为可见状态的时候调用,一般有用户导致(如:按Home键返回主屏)
  • Activity运行状态:onCreate() -> onStart() -> onResume()

  • Activity被覆盖:[运行状态]-> onPause() -> onResume()
  • Activity跳转或按Home键回到主屏:[运行状态]-> onPause() -> onStop() -> onRestart() -> onStart() ->onResume()
  • Activity被杀死:onCreate() -> onStart() -> onResume()
  • Activity退出:onPause()->onStop()->onDestroy()
  • [由一个Activity调到另一个Activity]:旧Activty[onPause]->新Activity[onCreate->onStart->onResume]->旧Activity[onStop->onDestroy]
  • 当Activity弹出Dialog对话框的时候,Activity不会回掉调OnPasue().
  • 当Activity启动Dialog风格的对话框[即Activity的Style设置的是对话框]会回掉onPause();
內存不足
  • 系统内存不足的时候,系统会优先杀死后台Activity所在的进程,如果內存还是不足,那么就会杀死暂存状态的Activity进程,如果还是不足,那么就有可能杀死前台进程。
  • 如果有多个后台进程的时候,采用[LRU]算法清除后台进程。
Activity栈

栈是一种后进先出的数据结构,Android通过Activity栈来管理Activity,一个Activity实例决定它在栈中的位置,处在前台的Activity总是在栈的最顶端,一个新的Activity创建的时候,原处于栈顶的Activity会被压入第二层,反之,处于栈顶的Activity因异常等其他原因被销毁的时候,处于第二层的Activity将会上浮到栈顶。越是处于栈底的Activity在內村不足的时候越容易被系统回收。

Activity启动模式
  • standard:标准模式,默认使用此模式,在此模式下,Activity会进入启动此activity所属的任务栈中。
  • singleTop:
    • 栈顶复用模式,如果使用此模式的Activity不再栈顶,那么启动时就会创建一个新的Activity,如果在栈顶,那么启动时次Activity将不会被重新创建,并回掉OnNewIntent()方法[onCreate,onStart,onResume将不会执行]。
    • 应用场景:浏览器的书签。
  • singleTask:
    • 栈内复用模式,当开启Activity的时候就去检查任务栈中是否有次实例存在,如果有,就直接复用次Activity,并将次Actviity上方的所有Activity都清除,保证任务占栈中只存在一个此Activity.
    • 应用场景:浏览器的主界面。
  • singleInstance:
    • 单实例模式,这种模式的Activity只能单独的位于一个任务栈中,并且只有一个实例存在。
    • 应用场景:Android的系统服务,如电话拨号界面。
Activity横竖屏切换
  • 默认情况下,Activity横竖屏切换的时候会销毁当前 Activity并重新创建。
  • 禁止切换横竖屏

  • * android:screenOrientation=”landscape”
    * android:screenOrientation=”portrait”
  • 禁止以下因素重新执行Activity的生命周期。

    * android:configChanges="orientation|screenSize|keyboardHidden"
    
Activity之间的通信

Activity之间的相互跳转和数据传递需要用到Intent.

通过设置Activity的包名和类名实现跳转称之为显示意图。

通过指定动作进行跳转,称之为隐式意图。

显示意图实现跳转
  • 跳转至同一个项目下的另一个Actvity,直接指定目标Activity的字节码即可。

    * Intent it = new Intent();
    * it.setClass(A.this,B.class);
    * startActivity(it) 
    
  • 跳转到其他应用的Actvity,需要指定该应用的包名及Activity的类名。[例:系统拨号]

    * Intent intent = new Intent();
    * //启动系统自带的拨号器应用
    * intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
    * startActivity(intent);
    
隐式意图实现跳转
  • 隐式意图跳转至指定Activity

    * Intent intent = new Intent();
    * //启动系统自带的拨号器应用
    * intent.setAction(Intent.ACTION_DIAL);
    * startActivity(intent);
    
  • 要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点

    * <intent-filter >
    *    <action android:name="com.mstanford.b"/>
    *    <data android:scheme="asd" android:mimeType="aa/bb"/>
    *   <category android:name="android.intent.category.DEFAULT"/>
    * </intent-filter>
    
    • action 指定动作(可以自定义,可以使用系统自带的)
    • data 指定数据(操作什么内容)
    • category 类别 (默认类别,机顶盒,车载电脑)
  • 隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
  • intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可
显示意图隐式意图应用场景
  • 显示意图用于启动同一个应用中的Activity.
  • 隐式意图用于启动不同应用中的Activity.
  • 注意:如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统就会列出所有与之匹配的Activity,由用户选择启动哪一个。[例:如用户手机上装有多个浏览器,在打开url连接的时候系统就会弹出多个可供选择的浏览器。]
Actvity之间的数据传递
  • 启动Intent并携带数据

    * Intent it = new Intent(A.this,B.class);
    * it.putExtra("Key","Value");
    * startActivity(it);    
    
  • 在目标Activity中取出携带数据

    * Intent it = getIntent();
    * Strign data = it.getStringExtra("Key");
    

链接:Android中Activity详解:https://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值