本文主要是收录一些人们可能经常会忽略,但又挺重要的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显示不了,因为它有自己默认的背景
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
流程图:
跳转到其他Activity时
点击返回键
再按一次返回键
其他跳转情况的先后顺序另开一篇来主要讲解!
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哦,符合一定的条件也是可以的)