本文主要是收录一些人们可能经常会忽略,但又挺重要的Android方面的小知识。有推荐的也可以在下方留言,大家一起进步呀!

目录:
1.Button, ImageButton和ImageView的区别
2.Activity和Fragment的生命周期,并且讲一下他们之间的关系(先后顺序)
3.Service两种启动方式的区别
4.为什么系统不建议在子线程访问UI

2019-7-6

1.Button, ImageButton和ImageView的区别
  • 属性方面:
    ① Button有text属性,其他没有;
    ② ImageButton和ImageView有src属性,Button没有;
    ③ 三个都有background属性。

  • 继承方面:
    ① Button继承TextView
    ② ImageButton继承ImageView
    ③ImageView继承View

  • 显示方面
    ① Button和ImageButton有按钮的样式,ImageView没有
    ② ImageView显示圆角图片的时候,ImageButton显示不了,因为它有自己默认的背景

图片.png

2019-7-7

2.Activity和Fragment的生命周期,并且讲一下他们之间的关系(先后顺序)

(1)Activity生命周期
onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy

(2)Fragment生命周期
onAttach -> onCreate -> onCreateView -> onActivityCreated -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach

(3)关系(Activity用A表示,Fragment用F表示)

Activity中onCreate相关代码
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.framelayout,new MyFragment());
transaction.commit();

A.onCreate -> F.onAttach -> F.onCreate -> F.onCreateView -> F.onStart -> A.onStart -> A.onResume -> F.onResume -> 跳转到其他Activity时 -> F.onPause -> A.onPause -> F.onStop -> A.onStop -> 点击返回键 -> A.onRestart -> F.onStart -> A.onStart -> A.onResume -> F.onResume -> 再按一次返回键 -> F.onPause -> A.onPause -> F.onStop -> A.onStop -> F.onDestroyView -> F.onDestroy -> F.onDetach -> A.onDestroy

流程图:

图片.png

跳转到其他Activity时

图片.png

点击返回键

图片.png

再按一次返回键

图片.png

其他跳转情况的先后顺序另开一篇来主要讲解!

3.Service两种启动方式的区别

(1)使用startService启动

  • 生命周期:onCreate -> onStartCommand -> onDestroy
  • 一旦服务开启就跟调用者(开启者)没有任何关系了。
  • 开启者退出了,开启者挂了,服务还在后台长期的运行。
  • 开启者不能调用服务里面的方法。

(2)使用bindService启动

  • 生命周期:onCreate -> onBind -> onUnBind -> onDestroy
  • 该方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
  • 绑定者可以调用服务里面的方法。
  • 常用于Service和Activity间通信。

2019-8-1

4.为什么系统不建议在子线程访问UI

系统不建议在子线程访问UI的原因是,在Android中的UI控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可预期的状态。那为什么系统不对UI控件的访问加上锁机制呢?原因有两个:其一,加上锁会让UI访问的逻辑变的复杂;其二,锁机制会降低UI访问的效率,因为锁机制会阻塞某些线程的执行。所以在Android系统中最简单而且高效的方法就是采用单线程模型来处理UI操作。(但是子线程并非说完全不能更新UI哦,符合一定的条件也是可以的)

收藏
评论加载中...