码迷,mamicode.com
首页 > 其他好文 > 详细

关于Activity的学习

时间:2015-11-18 00:50:24      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

  其实之前自己已经学习过,但是有些东西多少也忘记了,还是得再重新复习一下,再去找资料和网上搜索来加深自己的记忆;

  Activity的一些基本信息

  Activity通常是单独的屏幕,显示控件,用于用户操作,并对用户的操作事件进行响应处理;
  Actvity之间通过Intent进行通信;Intent中,对于动作以及动作的数据是比较关键的,当然,我们也可以直接指定要启动的Activity;
  Intent intent = new Intent();
  intent.setClass(this, SomeOtherActivity.class);
  startActivity(intent);
 
  每个Activity,都需要在 AndroidManifest.xml中进行描述,否则无法启动;
  例如工程默认启动的Activity
 
  <activity
      android:name=".MainActivity"
      android:alwaysRetainTaskState="true"
      android:label="@string/app_name"
      android:uiOptions="splitActionBarWhenNarrow" >
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
 
  需要指定名称为对应的Activity类名;由于是启动的Actvity,所以需要指定action为Main,category为LAUNCHER,这样才能在启动的时候经过 intent-filter的过滤,找到这个activity来启动; 
  其他的activity也需要进行描述;
 
  <activity
      android:name=".ContactDetailActivity"
      android:label="@string/title_activity_contact_detail" >
      <!-- android:theme="@android:style/Theme.Black" -->
  </activity>
 
  当然,如果我们需要让我们的activity来处理其他action时候,我们就需要指定 action,同时接收的时候,处理action对应的数据;
  这个时候,我们需要从调用 startActivity的地方,准备好要传给对应activity的数据;
  简单的传递数据
 
  intent.putExtra("key","value");
 
  在接受的activity中;
 
  Intent intent = this.getIntent();
  String flagValue = intent.getStringExtra("flag");
 
  我们也可以通过Intent.getExtras();返回一个Bundle对象,可以从这个对象里获取对应的值;
  例如我们通过 startActivityForResult方式启动另外一个Activity,然后得到那个Activity返回的数据,例如我们需要打开一个Activity来收集用户信息,用户点击提交的时候,我们需要得到用户数据,这个时候
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        switch (resultCode)
        {
            //结果返回
        case RESULT_OK:
            //获取Bundle的数据
            Bundle bl= data.getExtras();
            String sex=bl.getString("sex");
            if (sex.equals("M"))
            {
                rbMan.setChecked(true);
            }
            else
            {
                rbWoman.setChecked(true);
            }
            body_height=bl.getDouble("height");
            editHight.setText(""+body_height);
            break;
        default:
            break;
        }
    }
 
  通过Intent.getExtras获得Bundle之后,再去取里面的数据,其实和直接从Intent获取数据类似;
  我们启动的时候,需要通过startActivityForResult来启动:
 
  //通过intent跳转到下一个页面.
  Intent intent = new Intent();
  intent.setClass(ActivityBundle.this, ResultActivity.class);
 
  //跳到下一个Activity,并且等待其返回结果
  startActivityForResult(intent, 0);
 
 
  此时,另外一个Activity在收集完数据返回的地方,需要设置结果:
 
  //将intent传会上一个Activity
  Intent intent = new Intent();
  //通过Bundle来获取数据,通过key-Value的方式放入数据
  Bundle bl = new Bundle();
  bl.putDouble("height", body_height);
  bl.putString("sex", sex);
  //将Bundle放入Intent传入下一个Activity
  intent.putExtras(bl);
  ResultActivity.this.setResult(RESULT_OK, intent);
  ResultActivity.this.finish();
 
  有的时候,我们的基础数据类型,可能传递不了特定类型的数据(最大只能40K),或者数据太大(例如文件什么的),不方便直接通过intent的Bundle传递的时候,我们可以传递一个uri给到另外的Activity进行处理;
 
  例如我们打开网页的时候;
  Uri uri = Uri.parse(“http://www.cnblogs.com/”);
  Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  startActivity(intent);
 
  依此类推,我们还有其他的常用ACTION
  Intent.ACTION_DIAL 打开拨号界面
  Intent.ACTION_CALL 直接拨打电话
  Intent.ACTION_DELETE  卸载应用
  Intent.ACTION_SENDTO  打开邮件发送界面
  Intent.ACTION_SEND    直接发送邮件
  。。。
 
  当然这种方式只是特定的action以及action对应数据uri的一种方式;
  我们也可以bundle来传递uri的字符串表示,然后在处理的activity使用
  Uri uri = Uri.parse(intent.getStringExtra("uri"));
 
  这样的方式来传递;
  还有可以使用 Intent.EXTRA_STREAM 来传递uri ;
  intent.putExtra(Intent.EXTRA_STREAM, uri);
 

  关于Activity的生命周期

  技术分享技术分享

  这个图片也是最基本的Activity生命周期的状态图;

  

  Activity有三种状态:
  1、运行,即用户正在操作或者该活动在最顶部;
  2、暂停,有别的活动在上方,但是对于用户仍然可见;
  3、停止,活动被完全覆盖,不可见;
 
  三种状态中,后两种状态在系统需要内存的时候会被清理;用户回到该活动时候需要重新onCreate;
  活动完整生命周期和可视生命周期分别为onCreate到onDestroy和onStart到onStop;前台生命周期为onResume到onPause;
  根据我们的需要,重载这些函数来定制我们需要的处理流程;
    

  一般来说,我们对于完整生命周期需要的,初始化和摧毁放着完整生命周期两个函数,对于与界面相关的,放在可视生命周期函数,而前台生命周期的处理要轻量级;

  onPause是三个结束周期函数中,唯一一个必然调用的,所以一些持久化之类的需要在里面处理;
  onSaveInstanceState()和onRestoreInstanceState()可以在活动被系统强制清理时保存状态并在用户回到活动时候调用,所以可以用于保存一些临时状态,并在返回时候恢复这些状态;
 
  
 

关于Activity的学习

标签:

原文地址:http://www.cnblogs.com/coldforce/p/4973208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!