2020-Android-面试重难点(万字篇),android串口通信协议

本文深入探讨Android面试中的关键知识点,包括View绘画机制、事件传递机制、ART与Dalvik的区别,以及Android服务与线程的使用。详细解析Activity Manager Service、ActivityThread、进程模式、服务生命周期等,并分享了如何优化ListView和处理ANR问题。此外,还讨论了SurfaceView与View的本质区别和如何在WebView中调用Java方法。
摘要由CSDN通过智能技术生成

启动另一个Activity然后finish,先调用旧Activity的onPause方法,然后调用新的Activity和onCreate->onStart->onResume方法,然后调用旧Activity的onStop->onDestroy方法。

如果没有调用finish那么onDestroy方法不会被调用,而且在onStop之前还会调用onSavedInstanceState方法

onRestart方法执行完了之后还会调用onStart方法

fragment:[SupportFragmentManager,childFragment]

service:

[Android Service的生命周期]

[android-Service和Thread的区别]

Service和Intent Service:没啥区别,只是IntentService在onCreate方法中开启新的HandlerThread去执行。

Service运行的进程和线程:当它运行的时候如果是LocalService,那么对应的Service是运行在主进程的main线程上的。如onCreate,onStart这些函数都是在系统调用的时候在主进程的main线程上运行的。如果是RemoteSevice,那么对应的Service则是运行在独立的main线程上。

  1. 服务不是单一的进程,服务没有自己的进程,应用程序可以不同,服务运行在相同的进程中
  2. 服务不是线程,可以在线程中工作
  3. 在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务
  4. 同样是在后台运行,不需要交互的情况下,如果只是完成某个任务,之后就不需要运行,而且可能是多个任务,需要长时间运行的情况下使用线程
  5. 如果任务占用CPU时间多,资源大的情况下,要使用线程

Thread的运行是独立于Activity的,也就是说当一个Activity被finish之后,如果你没有主动停止Thread或者Thread里的run方法没有执行完毕的话,Thread就会一直执行。

8.View绘画机制

View的绘制主要涉及三个方法:onMeasure()、onLayout()、onDraw()

  1. onMeasure主要用于计算view的大小,onLayout主要用于确定view在ContentView中的位置,onDraw主要是绘制View。
  2. 在执行onMeasure()、onLayout()方法时都会通过相应的标志位或者对应的坐标点来判断是否需要执行对应的函数,如我们经常调用的invalidate方法就只会执行onDraw方法,因为此时的视图大小和位置均未发生变化,除非调用requestLayout方法完整强制进行view的绘制,从而执行上面三个方法。

进度条组件:

[ProgressView]
[AnnotationView]

9.事件传递机制

[android 事件处理机制总结,ScrollView ViewPager ListView GridView嵌套小结]

当手指触摸到屏幕时,系统就会调用相应View的onTouchEvent,并传入一系列的action。

dispatchTouchEvent的执行顺序为:

  1. 首先触发ACTIVITY的dispatchTouchEvent,然后触发ACTIVITY的onUserInteraction
  2. 然后触发LAYOUT的dispatchTouchEvent,然后触发LAYOUT的onInterceptTouchEvent

这就解释了重写ViewGroup时必须调用super.dispatchTouchEvent();

(1)dispatchTouchEvent:

此方法一般用于初步处理事件,因为动作是由此分发,所以通常会调用super.dispatchTouchEvent。这样就会继续调用onInterceptTouchEvent,再由onInterceptTouchEvent决定事件流向。

(2)onInterceptTouchEvent:

若返回值为true事件会传递到自己的onTouchEvent();若返回值为false传递到下一个View的dispatchTouchEvent();

(3)onTouchEvent():

若返回值为true,事件由自己消耗,后续动作让其处理;若返回值为false,自己不消耗事件了,向上返回让其他的父View的onTouchEvent接受处理

三大方法关系的伪代码:如果当前View拦截事件,就交给自己的onTouchEvent去处理,否则就丢给子View继续走相同的流程。

public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean consume = false;
if(onInterceptTouchEvent(ev))
{
consume = onTouchEvent(ev);
}
else
{
consume = child.dispatchTouchEvent(ev);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值