整理的关于常见的几种问题

作者: m_博客 | 来源:发表于2019-04-15 17:05 被阅读2次

MVP模式
1.mvp是什么,为什么用mvp
是什么:
mvp是android开发的一种模式,再MVC的基础上把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。
为什么用:
我们平常开发中的Activity、XML界面加起来就已经相当于一个MVC的架构模式,这种开发方式的缺点就是业务量大的时候,一个Acitvity多到上千行代码,想要改一处业务逻辑光是去找就要费半天劲,而且有点地方逻辑处理是一样的无奈是不同的 Activity 就没办法很好的写成通用方法。
MVP 模式将Activity 中的业务逻辑全部分离出来,让Activity 只做 UI 逻辑的处理,所有跟Android API无关的业务逻辑由 Presenter 层来完成。
将业务处理分离出来,管理方便,但是缺点就是增加了代码量

2.mvp的优缺点是什么
优:
1.UI层和逻辑层分离,UI层不在涉及业务逻辑代码,某层的改动不需要到处去修改代码;
2.测试方便,可以直接调用Presenter层写测试用式(可以使用Junit框架);
3.可维护性和可扩展性,MVP的各个类职责都非常明确且单一,后期的扩展,维护都会更加容易。
缺:
1.首先代码量增加了,一个小功能你可能要为它专门写Presenter和Model层的实现,以前这些你一口气就加在View层了。
2.需要对新进项目的人员进行一些MVP模式的培训,以便他们不会写出破坏已有模式的代码

引入mvvm的概念。

3.怎么优化MVP 的类文件量?

1.采用泛型定义契约类,将model,view,以及presenter定义在一个契约类里面,这样结构很清晰,一个类对应一个模块

Handler
1、handler是什么?

handler是更新UI界面的机制,也是消息处理的机制,我们可以使用handler 发送消息、处理消息

2、为什么要有Handler?

Android在设计的时候,封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没办法更新UI信息,就会抛出异常。

3、handler怎么用?

   1、post(Runnable);
   2、postDelayed(Runnable ,long);
   3、sentMessage
   4、sentMessageDelayed

4、Android为什么要设置只能通过Handler机制更新UI?

  为了解决多线程并发的问题;
  因:
  如果在一个Activity中,有多个线程去更新UI,并且都没有加锁机制,更新界面会混乱;
  如果对更新UI 的操作都加锁处理的话会使性能下降
  果:
  所以Android提供了一套更新UI的机制,我们只需要遵循这样的机制就好了。
  不用关心多线程的问题,更新UI的操作,都是在主线程的消息队列当中轮询处理的。

5、handler的原理是什么?

1、handler封装消息的发送(主要包括消息发送给谁)
2、Looper——消息封装的载体。
  (1)内部包含一个MessageQueue,所有的Handler发送的消息都走这个消息队列;
  (2)Looper.Looper方法,死循环,不断地从MessageQueue取消息,如果有消息就处理消息,没有消息就阻塞。
3、MessageQueue,一个消息队列,添加消息,处理消息
4、handler内部与Looper关联,handler->Looper->MessageQueue,handler发送消息就是向MessageQueue队列发送消息。
总结:
 handler负责发送消息,Looper负责接收handler发送的消息,并把消息回传给handler自己。 MessageQueue存储消息的容器。

6、HandlerThread的作用是什么?

 HandlerThread thread=new HandlerThread("handler thread");自动含等待机制,等Looper创建好了,才创建Handler,避免出现空指针异常。

7、主线程

  • ActivityThread 默认创建main线程,main中默认创建Looper,Looper默认创建MessageQueue

  • threadLocal保存线程的变量信息,方法包括:set,get

8、Android更新UI的方式?

1、runOnUIThread
2、handler post
3、handler sendMessage
4、view post

9、非UI线程真的不能更新UI吗?

不一定,之所以子线程不能更新界面,是因为Android在线程的方法里面采用checkThread进行判断是否是主线程,而这个方法是在ViewRootImpl中的,这个类是在onResume里面才生成的,因此,如果这个时候子线程在onCreate方法里面生成更新UI,而且没有做阻塞,就是耗时多的操作,还是可以更新UI的。

10、使用Handler遇到的问题?

比如说子线程更新UI,是因为触发了checkThread方法检查是否在主线程更新UI,还有就是子线程中没有Looper,这个原因是因为Handler的机制引起的,因为Handler发送Message的时候,需要将Message放到MessageQueue里面,而这个时候如果没有Looper的话,就无法循环输出MessageQueue了,这个时候就会报Looper为空的错误。

11、主线程怎么通知子线程?

可以利用HandlerThread进行生成一个子线程的Handler,并且实现handlerMessage方法,然后在主线程里面也生成一个Handler,然后通过调用sendMessage方法进行通知子线程。同样,子线程里面也可以调用sendMessage方法进行通知主线程。

XML和JSON的区别
xml:扩展标记语言
json:一种轻量级的数据交换格式
数据体积方面,JSON相对XML来讲,数据的体积小,传递的速度更快些
数据交互方面,JSON与JavaScript的交互更加方便,更容易解析处理,更好地进行数据交互
数据描述方面,JSON对数据的描述性比XML较差
传输速度方面,JSON的速度要远远快于XML

相关文章

  • 整理的关于常见的几种问题

    MVP模式1.mvp是什么,为什么用mvp是什么:mvp是android开发的一种模式,再MVC的基础上把Acti...

  • 关于离婚的几种常见问题

    有网友爆料,22日上午,歌手满文军与妻子现身北京朝阳区民政局疑似办理离婚手续。该网友表示,在民政局偶遇该夫妇,和工...

  • Java线上问题定位解决

    本文资料网上搜集整理。 Java 应用系统常见的线上问题分为如下几种: 进程退出 OutOfMemory问题 CP...

  • 你真的够了解“空状态”吗?

    整理了一下关于空状态的几种常见类型以及设计方法,也算是对自己现阶段所遇到的问题的思考与总结吧!文中图片均来自网络。...

  • css居中方式

    样式居中的方式也是在web面试中比较常见的问题,笔者也整理了几种常见实现方式,有不足之前请指出学习 1.paddi...

  • 整理||几种常见花茶的功效

    文/等等 菊花茶 菊花茶是使用菊花为原料制成而成的花草茶。菊花茶经过鲜花采摘、阴干、生晒蒸晒、烘培等工序制作而成。...

  • redis锁处理并发问题

    redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法,在此进行自己的总结和整理。 set...

  • iOS - 一些常见问题的整理

    iOS - 一些常见问题的整理 iOS - 一些常见问题的整理

  • 家庭英语启蒙计划

    1、家庭英文启蒙的计划和阅读材料 2、常见的关于家庭英语启蒙的问题 3、几种常见的分级阅读材料的介绍与选择 一个最...

  • 女人到底应不应该进行胸部保养

    女人到底应不应该进行胸部保养?关于这个问题的回答,还是褒贬不一的。 下面我先给大家总结一下,胸部常见问题的几种问题...

网友评论

    本文标题:整理的关于常见的几种问题

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