Activity的生命周期

Activity的生命周期

答:onCreate->onStart->onResume->Activity运行->新的Activity运行->onPause->onStop->onDestroy->Activity销毁
Activity生命周期的切换过程.png

Activity的启动方式

答:四种启动模式,standard, singleTask, singleTop, singleInstance。

  • standard:标准模式,在当前的任务栈上创建新的Activity,不论之前有没有创建过该Activity。注意:ApplicationContext无法启动standard模式的Activity。
  • singleTask:栈内复用模式,分两种情况,第一种情况:如果有任务栈里已经创建了该Acitiviy,直接销毁该Acitivity栈上面的所有Acitivity,无须新创建一个Activity;第二种情况:如果没有任务栈里已经创建该Activity,创建一个新的任务栈并在新栈上创建新Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。
  • singleTop:栈顶复用模式,如果该Activity在任务栈栈顶,即当前活动的Acitivty就是要创建的Activity,那么不会创建新的Activity。注意:该模式下复用Activity,系统会调用Activity的onNewIntent方法。
  • singleInstance:单实例模式,加强版的singleTask,当每次都直接创建一个新的任务栈,再在该新栈上创建新Activity。注意:singleInstance永远是单栈单Activity

onSaveInstanceState和onRestoreInstanceState调用的过程和时机

  • 调用时机:Activity的异常情况下(例如转动屏幕或者被系统回收的情况下),会调用到onSaveInstanceState和onRestoreInstanceState。其他情况不会触发这个过程。但是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用。
  • 调用过程:旧的Activity要被销毁时,由于是异常情况下的,所以除了正常调用onPause, onStop, onDestroy方法外,还会在调用onStop方法前,调用onSaveInstanceState方法。新的Activity重建时,我们就可以通过onRestoreInstanceState方法取出之前保存的数据并恢复,onRestoreInstanceState的调用时机在onCreate之后
    Activity的异常情况下的生命周期.png

Activity A调用Activity B时,A调用什么函数?

  • 旧的Activity的onPause方法执行结束,才执行新的Activity的onCreat, onState和onResume方法。
  • onPause方法中不能有重量级的任务,不然会影响新Activity的创建。

onNewIntent的作用和调用时机?

  • 调用时机:如果Activity的启动模式是:singleTop, singleTask, singleInstance,在复用这些Acitivity时就会在调用onStart方法前调用onNewIntent方法
  • 作用:让已经创建的Activity处理新的Intent。

fragment的生命周期

Fragment的生命周期.png

fagement和Activity的通信

有五种方法

  • Fragment可以通过getActivity()访问Activity实例,并轻松地执行在Activity布局中查找视图等任务。

    View listView = getActivity().findViewById(R.id.list);
    
  • Activity可以通过FragmentManager的findFragmentById()或findFragmentByTag(),获取对Fragment的引用。

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
    
  • 创建对Activity的事件回调

    • 在fragment中定义一个回调接口,并要求宿主Activity实现它。当Activity通过该接口收到回调时,可以根据需要与布局中的其他片段共享这些信息。\

    • 代码示例

      public static class FragmentA extends ListFragment {
          ...
          // Container Activity must implement this interface
          public interface OnArticleSelectedListener {
              public void onArticleSelected(Uri articleUri);
          }
          ...
          @Override
          public void onAttach(Activity activity) {
              super.onAttach(activity);
              try {
                  mListener = (OnArticleSelectedListener) activity;
              } catch (ClassCastException e) {
                  throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
              }
          }
          @Override
          public void onListItemClick(ListView l, View v, int position, long id) {
              // Append the clicked item's row ID with the content provider Uri
              Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id);
              // Send the event and Uri to the host activity
              mListener.onArticleSelected(noteUri);
          }
      }
      

      向操作栏添加项目

      public void setArguments(Bundle args)
      final pubilc Bundle getArguments()
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值