1. Callback
把耗时操作放到子线程运行, 在耗时操作完成后将结果返回到主线程来呈现或再处理时,子线程主动地调用主线程中处理结果的方法, 这种回调式的机制就是Callback。(Java中常用interface进行处理)
作用:
>1.可以节省时间,不用长久的等待,充分利用了资源;
>2.把接口方法的定义和调用给封装起来,方便使用。
使用场景:
>1.事件监听器;
>2.生命周期函数;
>3.当方法的具体实现不确定的时候可以设置回调函数让清楚的人自己去实现,而我们只是提供一个实现的接口出去。
注:Android中需要自定义的使用callback主要是在网络访问上, 网络访问是一个耗时操作, 不能马上返回结果, 因此结果的返回就不能直接使用return, 这里就需要使用Callback机制, 在网络访问完成时, 主动调用结果处理函数。
2. 横竖屏切换时候的activity的生命周期:(引用链接http://blog.csdn.net/wulianghuan/article/details/8603982)
>1、新建一个Activity,并把各个生命周期打印出来
>2、运行Activity,得到如下信息
onCreate-->
onStart-->
onResume-->
>3、按crtl+f12切换成横屏时
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
>4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
>5、修改AndroidManifest.xml,把该Activity添加Android:configChanges="orientation",执行步骤3
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
>6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->
>7、把步骤5的android:configChanges="orientation"改成 android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印onConfigChanged
onConfigurationChanged-->
>8、执行步骤4
onConfigurationChanged-->
onConfigurationChanged-->
总结:
>1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 ;
>2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 ;
>3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
》整个Activity的生命周期
>1.当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
>2.Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState--> onPause --> onStop onRestart -->onStart--->onResume
>3.Activity未被完全覆盖只是失去焦点:onPause--->onResume