学习笔记2-- Activity的什么鬼

Activity概述

Activity 是用户交互的窗口,一定要内外兼修,长得漂亮还贤淑。一个字“完美”

一个空白Activity的创建
  • 在已有的app中通过Android studio 创建Activity文件
  • 创建和加载布局文件
  • 在AndroidManifest.xml 中注册
    • application
    • intent-filter
添加UI组件–example Menu
  • res/menu/menu.xml 创建一个menu 布局文件
  • java/ActivityFrist.java 加载布局文件onCreatOptionsMenu(R.emnu.menu, menu),并重写onOptionsItemSelected(MenuItem item)
Activity中的Intent通信

Intent是Android程序中各组件进行重要交互方式之一,可以用于启动活动、服务、发送广播等。
Intent 有多个构造函数的重载,其中一个Intent(Context packageContext, Class< ?>cls);

Class< ?>clsJava的一种反射机制.只知道类名就可以得到类信息(无需New)

  • 显式Intent:比较简单,直接制定Intent的两个参数,意图很明显

    Intent(FirstActivity.this, SecondActivity.class);
    startActivity(intent);

  • 隐式Intent:通过action和category来过滤想要的意图

    • 过滤配置,需要在AndroidManifest.xml的application注册地方申明过滤的< Intent-filter>属性

        <activity android:name=".UiActivity">
            <intent-filter>
               <action android:name="com.examlpe.activity.ACTION_START" />
               <category android:name="com.examlpe.activitytest.MY_CATEGORY" />
           </intent-filter>
        </activity>
      
    • 触发Intent,在Acivity.java中调用intent,category的DEFAULT是默认设置的。

      Intent intent = new Intent(“com.examlpe.activity.ACTION_START”);
      intent.addCategory(“com.examlpe.activitytest.MY_CATEGORY”);
      startActivity(intent);

    • 其他隐式Intent用法,具体的扩充请网上查阅,下面简单实例:

      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setData(Uri.parse(“http://www.baidu.com“));
      startActivity(intent);

  • intent的数据传输:

    • 数据发送:intent通过重载putExtra()传递【name ,data】

      发送Activity
      SendActivity.java
      String data = “Hello SendActivity”;
      Intent intent = new Intent(SendActivity.this. ReceiveActivity.class);
      intent.putExtra(“extra_data”, data);
      startActivity(intent);


      接受Activity
      ReceiveActivity.java
      Intent intent = getIntent();
      String data = intent.getStringExtra(“extra_data”);
      Log.d(“ReceiveActivity”, data);

    • 数据返回 :在操作back按键时,通过startActivityForResult()的方法在活动销毁之前返回一个结果。

      FirstActivity
      startActivityForResult(Intent intent, value);
      Intent intent = new Intent(FirstActivity.this. SecondActivity.class);
      startActivityForResult(intent ,1); //请求码只要唯一,这里传入1

      重写此函数处理请求码操作
      @ Override //
      protected void onActivityResult( int requestCode , int resultCode, Intent data) {
      switch (requestCode) {}
      }


      SecondActivity
      Intent intent = new Intent();
      intent.putExtra(“data_return”, “Hello”);
      setResult(RESULT_OK, intent);
      finish();

Activity的生命周期

Activity的生命周期

Activity回收时数据保存

为了防止在Activity 资源暂停状态时被回收,所以需要在保证在Activity被回收之前,通过onSaveInstanceState(Bundle outState)回调方法,来保存数据。

@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
String tempData = “Something you just typed”;
outState.putString(“data_key”, tempData);
}


@Override
protect void onCreat(Bundle savedInsdtanceState) {
super.onCreate(saveInsdtanceState);
……
if(saveInstanceState != null){
String tempData = saveInstanceState.getString(“date_key”);
Log.d(TAG,tempDate);
}
}

Activity启动模式

通过修改Androidmanifest.xml 中< activity>标签指定android:launchMode属性来启动模式
1.1 standard : 默认的启动模式,每次启动都会创建新的Activity栈。
1.2 singleTop :在启动活动时,如果发现返回栈顶是已经是该活动,就直接使用,不创建新的栈。
1.3 singleTask :在启动活动时,会检测返回栈中是否存在此实例,如果存在,就不创建新栈
1.4 singleInstance :在活动中创建一个新的返回栈,来管理这个活动,使得不论那个应用访问这个活动,都公用一个返回栈,实现共享活动的实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值