散装安卓开发笔记

1.
override fun onSaveInstanceState(outState: Bundle)//当activity被stop或者临时销毁时会被调用
override fun onRestoreInstanceState(savedInstanceState: Bundle) //只有当系统activity是被系统由于配置改变并临时销毁时才会调用,如转屏。要好好理解,如果activity在activity堆栈没有被销毁只是隐藏了,无需restore,但如果activity就是要销毁了,那也无需restore,因为不restore符合预期。 细品。。。

 

您可以设置一个 Activity 作为任务的入口点,方法是为该 Activity 提供一个 intent 过滤器,并将 "android.intent.action.MAIN" 作为指定操作,将 "android.intent.category.LAUNCHER" 作为指定类别。例如:

    
        
            
            
        
        ...
    
    

 

2.

可以设置一个 Activity 作为任务的入口点,方法是为该 Activity 提供一个 intent 过滤器,并将 "android.intent.action.MAIN" 作为指定操作,将 "android.intent.category.LAUNCHER" 作为指定类别。例如:

    
        
            
            
        
        ...
    

这种 intent 过滤器可在应用启动器中显示 Activity 的图标和标签,让用户可以启动 Activity 并在启动后随时返回到该 Activity 创建的任务。

第二个作用非常重要:用户必须能够离开任务,之后再使用此 Activity 启动器返回到该任务。因此,只有当 Activity 具有 ACTION_MAINCATEGORY_LAUNCHER 过滤器时,才应使用 "singleTask""singleInstance" 这两种启动模式,它们会将 Activity 标记为始终启动任务。比如,可以想象一下,如果缺少该过滤器会发生什么情况:intent 会启动 "singleTask" Activity,随之启动新任务,用户花了一些时间在该任务上。然后,用户按主屏幕按钮。此时,该任务会转到后台,不再可见。现在,用户无法返回到该任务,因为它未显示在应用启动器中。

对于那些您不希望用户能够返回到 Activity 的情况,请将 元素的 finishOnTaskLaunch 设置为 "true"

 

3.

通过 intent 发送数据时,应小心地将数据大小限制为几 KB。发送过多数据会导致系统抛出 TransactionTooLargeException 异常。

4.

Binder 事务缓冲区的大小固定有限,目前为 1MB,由进程中正在处理的所有事务共享。由于此限制是进程级别而不是 Activity 级别的限制,因此这些事务包括应用中的所有 binder 事务,例如 onSaveInstanceState,startActivity 以及与系统的任何互动。超过大小限制时,将引发 TransactionTooLargeException。

对于 savedInstanceState 的具体情况,应将数据量保持在较小的规模,因为只要用户可以返回到该 Activity,系统进程就需要保留所提供的数据(即使 Activity 的进程已终止)。我们建议您将保存的状态保持在 50k 数据以下。

5.

如果您向事务添加多个更改(如又一个 add()remove()),并调用 addToBackStack(),则调用 commit() 前应用的所有更改都将作为单一事务添加到返回栈,并且返回按钮会将它们一并撤消。

FragmentTransaction 添加更改的顺序无关紧要,不过:

  • 您必须最后调用 commit()
  • 如果您要向同一容器添加多个片段,则您添加片段的顺序将决定它们在视图层次结构中出现的顺序。

如果您没有在执行删除片段的事务时调用 addToBackStack(),则事务提交时该片段会被销毁,用户将无法回退到该片段。不过,如果您在删除片段时调用 addToBackStack(),则系统会停止该片段,并随后在用户回退时将其恢复。

提示:对于每个片段事务,您都可通过在提交前调用 setTransition() 来应用过渡动画

一个小点: 如果把Fragment元素静态写入activity的布局XML文件,则这个fragment无法remove detach,因为它“add” & “attach”进来时不是通过Fragment的事物处理,所以配对的“remove” “detach”的事物处理函数没效果。 但hide可以

replace 就是先删除当前容器中的fragment(如果有的话),然后在add新fragment
这样的话,如果原来的fragment无法删除的话(静态的fragment),则会出现一个容器中两个fragment的情况(重叠)

6.Fragment 一些回调的先后顺序

onAttach--->onCreate--->onCreateView--->onViewCreated--->onActivityCreated

要验证是否存在可以响应相应 Intent 的 Activity,请调用 queryIntentActivities() 以获取能够处理您的 Intent 的 Activity 列表。如果返回的 List 不为空,则您可以安全地使用该 Intent。例如:


    val activities: List = packageManager.queryIntentActivities(
            intent,
            PackageManager.MATCH_DEFAULT_ONLY
    )
    val isIntentSafe: Boolean = activities.isNotEmpty()
    
如果 isIntentSafetrue,则至少有一个应用会响应该 Intent。如果为 false,则没有任何应用可以处理该 Intent。

 

你可能感兴趣的:(散装安卓开发笔记)