android面试:handler、杂记

2021-07-25  本文已影响0人  书虫大王X

1.增强封装,把内部类放在外部类当中,不允许其它类访问这个内部类。
2.实现多重继承
3.内部类可以直接访问外部类当中的成员。

不一定。
1.Activity存在一种审计机制,这个机制会在Activity完全显示之后工作,如果子线程在Activity完全显示之前更新UI是可行的;
2.SurfaceView:多媒体视频播放,也可以在子线程中更新UI
3.Progress:进度相关控件,也可以在子线程中更新UI


  • 方法一:通过程序逻辑来进行保护。 1.在关闭Activity的时候停掉你的后台线程线程停掉了,就相当于切断了Handler和外部连接的线,Activity自然会在合适的时候被回收。
    2.如果你的Handler是被delay的Message持有了引用,那么使用相应的Handler的removeCallbacks()方法,把消息对象从消息队列移除就行了。
  • 方法二:将Handler声明为静态类。 PS:在Java 中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用,静态的内部类不会持有外部类的引用。 静态类不持有外部类的对象,所以你的Activity可以随意被回收。由于Handler不再持有外部类对象的引用,导致程序不允许你在Handler中操作Activity中的对象了。所以你需要在Handler中增加一个对Activity的弱引用(WeakReference)。
  1. Message Queue(消息队列):用来存放线程放入的消息。
    4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。

fragment:

  • apply没有返回值而commit返回boolean表明修改是否提交成功
  • apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。
上一篇 下一篇

猜你喜欢

热点阅读