美文网首页工作生活
Activity从建立到显示、一些问题

Activity从建立到显示、一些问题

作者: 天使飞吧 | 来源:发表于2019-07-01 20:35 被阅读0次

    浅谈Activity从建立到显示:

    1,Activity 是一个组件:掌控着一群View控件的逻辑和生命周期

    2,Window是一个抽象基类:提供了一系列窗口的方法,比如设置背景,标题等等,而它的唯一实现类则是PhoneWindow;每一个activity都对应掌控着这样一个window

    3,从代码看,Activity在oncreate()之前创建了一个window对象。

    在执行oncreate()中的setcontenView(R.id.layout);会调用window中的setcontenView(),这个方法会创建一个decorView,也是window中的内部类,根据theme ,style设置decorView的样式,decorView又是继承了FrameLayout 根据这个XML-layout 返回需要绘制的视图。

    Fragment的状态是可见还是不可见的,如果可见则进行懒加载操作。

    onAttach():Fragment与Activity已经完成绑定

    onCreate():初始化Fragment。

    onCreateView():初始化Fragment的布局。加载布局和findViewById的操作

    onActivityCreated():在该方法内可以进行与Activity交互的UI操作,

    onStart():Fragment由不可见变为可见状态。

    onResume():Fragment处于活动状态,用户可与之交互。

    onPause():Fragment处于暂停状态,可见不可交互。

    onStop():Fragment完全不可见。

    onDestroyView():销毁与Fragment有关的视图,

    onDestroy():销毁Fragment。

    onDetach():解除与Activity的绑定。

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

    Android的UI控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可预期的状态这时你可能会问为何系统不对UI控件的访问加上锁机制呢?

    因为加锁机制会让UI访问逻辑变的复杂,降低UI的访问效率,因为加锁会阻塞某些线程的执行

    Looper死循环为什么不会导致应用卡死?

    造成ANR的不是主线程阻塞,而是主线程的Looper消息处理过程发生了任务阻塞,无法响应手势操作,不能及时刷新UI等。

    可以在子线程直接new一个Handler吗?怎么做?

    不可以,因为在主线程中,Activity内部包含一个Looper对象,它会自动管理Looper,处理子线程中发送过来的消息。而对于子线程而言,没有任何对象帮助我们维护Looper对象,所以需要我们自己手动维护。所以要在子线程开启Handler要先创建Looper,并开启Looper循环

    Android中还了解哪些方便线程切换的类

    AsyncTask:底层封装了线程池和Handler,便于执行后台任务以及在子线程中进行UI操作。HandlerThread:一种具有消息循环的线程,其内部可使用Handler。IntentService:是一种异步、会自动停止的服务,内部采用HandlerThread。

    在Activity中创建一个thread跟在service中创建一个thread的区别?

    在Activity中被创建:该Thread的就是为这个Activity服务的,在该Activity中处理一些消息和事件,Activity销毁后,Thread也就结束了

    在Service中被创建:这是保证最长生命周期的Thread的唯一方式,只要整个Service不退出,Thread就可以一直在后台执行,一般在Service的onCreate()中创建,在onDestroy()中销毁。所以,在Service中创建的Thread,适合长期执行一些独立于APP的后台任务,比较常见的就是:在Service中保持与服务器端的长连接

    相关文章

      网友评论

        本文标题:Activity从建立到显示、一些问题

        本文链接:https://www.haomeiwen.com/subject/pfoncctx.html