前段时间面试被问到的几个问题,有兴趣的朋友,可以帮忙回答一下。
1、在开发一款Android应用时,如果让你给这个应用搭建一个框架或者叫架构,请问你主要会做哪些工作?
2、开发过程中如果遇到问题,请问你解决问题的思路是什么?
3、在开发应用时,我们经常会用到线程池,请问为什么要用线程池?创建线程池的时候,一般会用到哪些比较重要的参数?
4、在与网络交互时,同时最多能够创建多少个http连接?最多发送多少个http请求?
5、Activity切换时(比如从Activity跳转到ActivityB),经常会遇到黑屏,请问为什么会黑屏,有哪些解决方法?
6、在AsyncTask的doInBackground方法里,如果想与主线程交互,都有哪些方法,直接在doInBackground方法里面new Handler()可不可以?
Android面试题
------解决方案--------------------
1.可以通过建立model,db,wcf/webservice这些包来分别管理不同的业务
2.遇到异常等方面的问题先debug,遇到思路上的问题可以google
3.没用到过线程池,一般都是通过继承Thread类或AsyncTack来实现多线程
4.创建http链接的数量和http请求的最大值这个真不知道,但是我遇到过连接过多导致内存溢出的情况,我想这应该是和机器有关吧?(请知道的网友具体解答一下,谢谢)
5.A->B黑屏一般是因为B在oncreate或其他方法中在主线程中做了耗时操作导致的
6.在调用doInBackground前可以使用onPreExecute,在调用doInBackground中可使用onProgressUpdate,在调用doInBackground后使用onPostExecute来与主线程交互,关于使用new Handler()是否可与主线程交互的问题没有实际使用过,但是最好还是使用自带的方法比较好一些
------解决方案--------------------
3.线程池可以 有效重用 已经创建的线程对象,节省对系统资源的开销,在Android 里管用的方式应该是直接重写 AsyncTask 实现逻辑就行了, 因为AsyncTask 内部已经使用了先进的线程池框架。
5.添加 Activity 切换动画时 会出现黑屏,原因是 Activity 实际最外层是一个 Window ,Window 对象的背景默认就是黑色,所以切换时 实际上 黑屏的 Window先出现在界面上,然后Activity 内容才以动画形式出现。
解决方式 是为 Activity 添加 style , 详细可以 google 一下。
------解决方案--------------------
1、2随便扯扯就行了
3、线程池主要功能是线程重用,避免重复创建销毁线程
楼上几位说的直接重写系统的AsyncTack是会出问题的,重复创建AsyncTack会导致FC,这个问题有很多帖子讲了,楼主可以搜搜看。
线程池关键参数,看下线程池的构造方法就知道了,不用过多解释吧。。。
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue