美文网首页
探究Activity

探究Activity

作者: GoBg | 来源:发表于2017-03-03 18:32 被阅读20次

Activity的基本使用

  • 1.手动创建Activity
    • 自定义class继承 appCompatActivity或是其他Activity类
    • 通过setContentView("布局")为Activity添加布局文件
    • 在AndroidManifest.xml 注册改 Activity
  • 2.在Activity中使用Toast
    • Toast.makeText("上下文,Context的子类","显示的字符串",Toast.LENGTH_SHORT).show();
  • 3.在Activity中使用Menu
    • 创建item菜单
    • 在Activity中重写onCreateOptionsMenu(Menu menu),加载资源文件到menu上,当返回值为true 的时候 menu 才会显示
  • 4.销毁Activity
    • Activity中调用 finish() 销毁当前的Activity

Intent的使用

  • 显式Intent
    • 显式Intent ,顾名思义 是指确切的知道将要打开的Activity,
    • 使用方式,new Intent(Context, NextActivity.class);
  • 隐式Intent
    • 隐式Intent ,是指在没有确定知道要跳转的Activity,使用了一系列的action,category,由系统去分析这个Intent,找到合适的Activity并启动
    • 在activtiy指定了action 或是categroy 时,启动Activity的Intent必须都与该Activity参数都一一对应时候才会启动该Activity
    • category 的默认参数一般不用写,也可以启动
    • 比如启动系统浏览器打开百度
      • Intent intent=new Intent(Intent.ACTION.VIEW);
      • intetn.setData(Uri.parse("http://www.baidu.com"))
      • staetActivity(intent);
    • 比如启动打电话
      • Intent intent=new Intent(Intent.ACTION.DLAL);
      • intent.setData(Uri.parse("tel:10086"));
      • startActivity(intent);
  • 向下一个Activity传递参数
    • 传递参数可使用intent.putExtra("KEY","value")
    • 该方法重载,可以传递多种数据类型
    • 可以使用传递Bundle对象
    • 要想传递其他的对象类型的参数的时候,该类必须实现Serializable 或者 Parcelable
    • 在启动的Activity 中通过 getIntent() 获取Intent对象
      • 在通过intent对象,获取传递过来的参数,比如传递额String类型的参数,就通过intent.getStringExtra("KEY")
      • 传递的整数,就通过intent.getIntExtra("KEY");
  • 返回数据给上一个Activity
    • 在返回给上一个Activity参数中用到的是一个requesCode 和一个 resultCode
    • requestCode用于标记是从哪个Activiyt启动的
    • resultCode用于标记是从哪个Activity返回的
    • 在需要返回个上一个Activty数据这种情况的时候,启动Activity的方式就不是原来的startActivity(intent)了
    • 具体使用
      • ActivityOne startActivitForResutl(intent,requestCode) requestCode 随意指定,但一定要唯一
      • ActivityTwo setResult( resultCode ,intent); finish; resultCode 随意指定,但一定要唯一
      • 当ActivityTwo 销毁的时候就会调用ActivityOne 中的onActivityResult(int requestCode,int resultCode,Intent data)
      • 在判断requestCode 和 resultCode 都准确无误的情况下,就可以使用date.getStringExtra("KEY"),获取返回的数据

Activity 的生命周期

  • 完整的生命周期
    • onCreate() > onStart() > onResume > onPause() > onStop() > onDestroy()
    • onRestatrt();
  • 不同状态下的方法回调
    • 启动ActivityOne onCreate() > onStart() > onResume();
    • 在ActivityOne 中启动 ActivityTwo ActivityOne 中会调用 onPause() > onStop()
    • 从ActivityTwo 中返回 ActivityOne ActivityOne中会调用onRestart() > onStart() > onResume();
    • 在ActivtiyOne中按下返回键时 ActivityOne 中会调用onPause() > onStop() > onDestroy();
    • 如果在新打开的Activity没有完全的遮挡住下面的Activity的时候, 下面的Activity只会回调 onPause(),还是属于可见的状态,再次返回的时候也只是会回调onResume()
  • Activity的被销毁时的数据存储
    • 当手机的内存不足的情况下,会销毁处于停止状态的Activity.为了优化用户体验, 所以这时数据的保存就显得尤为重要.
    • 在Activity销毁的时候必然会调用onSaveInstaceState(Bundle outState),可以通过bundle 以键值对的形式传递参数,
    • 当Activity再次重新创建的时候调用的onCreate(Bundle onSaveInstaceState) 取出Bundle所携带的参数
    • 因为第一次创建Activity的时候没有返回的参数,所以要在这里判断Bundle是否为null之后在进行下一步操作

Activity 的启动模式

  • standard 每一Activity 默认的启动模式,是以先进后出的结构进行,每次打开一个新的Activity都会重新创建
  • singleTop 单栈顶模式,在启动一个Activity时候判断是否在栈顶,如果不再栈顶,就会重新创建一个新的Activity实例,如果在栈顶,就会复用该栈顶的Activity 实例.
  • singleTask 单任务栈模式, 再打开一个新的Activity的时候会判断该Activity是否在该任务栈存在,如果存在,就选择复用,不存在就会新创建一个Activity的实例
  • singleInstance 单独的返回栈管理一个Activity

Activity 的最佳实践

  • 知晓当前在那个Activity
    • 创建BaseActivity 在onCreate()中调用getClass().getSimpleName(), 让所有的Activity都继承BaseActivity
  • 安全的退出Activity
    • 创建ActivtiController . 添加addActivity(Activity activity) 并在BaseActivity 的onCreate() 中调用
    • 添加removeActivity(Activity activity) 在BaseActivity的onDestroy()中调用
    • 创建finishAllActivity() 在需要关闭所有Activity的地方调用即可
  • 启动Activity的最佳写法
    • 将打开Activity所需要用到的参数,以方法的形式封装,只把需要用到的参数对外暴露,简单,明了

相关文章

网友评论

      本文标题:探究Activity

      本文链接:https://www.haomeiwen.com/subject/kcscgttx.html