前段时间面试被问到的几个问题,有兴趣的朋友,可以帮忙回答一下。1、在开发一款Android应用时,如果让你给这个应用搭建一个框架或者叫架构,请问你主要会做哪些工作?2、开发过程中如果遇到问题,请问你解决问题的思路是什么?3、在开发应用时,我们经常会用到线程池,请问为什么要用线程池?创建线程池的时候,一般会用到哪些比较重要的参数?4、在与网络交互时,同时最多能够创建多少个http连接?最多发送多少个http请求?5、Activity切换时(比如从Activity跳转到ActivityB),经常会遇到黑屏,请问为什么会黑屏,有哪些解决方法?6、在AsyncTask的doInBackground方法里,如果想与主线程交互,都有哪些方法,直接在doInBackground方法里面new Handler()可不可以?
Android面试题

解决方案 »

  1.   

    1.可以通过建立model,db,wcf/webservice这些包来分别管理不同的业务2.遇到异常等方面的问题先debug,遇到思路上的问题可以google3.没用到过线程池,一般都是通过继承Thread类或AsyncTack来实现多线程4.创建http链接的数量和http请求的最大值这个真不知道,但是我遇到过连接过多导致内存溢出的情况,我想这应该是和机器有关吧?(请知道的网友具体解答一下,谢谢)5.A->B黑屏一般是因为B在oncreate或其他方法中在主线程中做了耗时操作导致的6.在调用doInBackground前可以使用onPreExecute,在调用doInBackground中可使用onProgressUpdate,在调用doInBackground后使用onPostExecute来与主线程交互,关于使用new Handler()是否可与主线程交互的问题没有实际使用过,但是最好还是使用自带的方法比较好一些
      

  2.   

    3.线程池可以 有效重用 已经创建的线程对象,节省对系统资源的开销,在Android 里管用的方式应该是直接重写 AsyncTask 实现逻辑就行了, 因为AsyncTask 内部已经使用了先进的线程池框架。5.添加 Activity 切换动画时 会出现黑屏,原因是 Activity 实际最外层是一个 Window ,Window 对象的背景默认就是黑色,所以切换时 实际上 黑屏的 Window先出现在界面上,然后Activity 内容才以动画形式出现。
    解决方式 是为 Activity 添加 style , 详细可以 google 一下。
      

  3.   

    1、2随便扯扯就行了
    3、线程池主要功能是线程重用,避免重复创建销毁线程 
       楼上几位说的直接重写系统的AsyncTack是会出问题的,重复创建AsyncTack会导致FC,这个问题有很多帖子讲了,楼主可以搜搜看。
      线程池关键参数,看下线程池的构造方法就知道了,不用过多解释吧
    int corePoolSize, 
    int maximumPoolSize,
    long keepAliveTime, 
    TimeUnit unit, 
    BlockingQueue<Runnable> workQueue
    4、做过这么多项目还真没遇见过http请求上限的问题,因为在同一个页面,如果同时请求数量太多了,那么就是设计失败,一般3个以下。后台service轮播线程一般为一个,不会太多。
    5、View创建和数据加载必须分开,View创建和渲染在主线程,数据加载在子线程。
    6、onPreExecute、onProgressUpdate、onPostExecute是分别在线程执行前、中、后的回调。直接new Handler()会报未执行Handler.prepare()错误。如果一定要使用Handler,可以new Handler(Looper.getMainLooper()); 并使用post方法将Runnable加入Handler