Android开发Android技术知识面试,妥妥的

妥妥的去面试之Android基础(四)

2019-02-21  本文已影响15人  树獭非懒

笔者由于在近期需要找工作,所以近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想得到的机会才可能有机会入你怀中。

笔者会将准备面试的学习过程记录下来,方便自己复盘的同时也希望能给一道找工作的小伙伴们一些帮助。笔者准备的内容大纲如下

Android面试大纲.png

妥妥的去面试之Android基础(一)

妥妥的去面试之Android基础(二)

妥妥的去面试之Android基础(三)

接下来开始本篇博客的正菜:

1.Bitmap使用时需要注意什么?

ALPHA_8 每个像素占用1byte内存
ARGB_4444 每个像素占用2byte内存
ARGB_8888 每个像素占用4byte内存(默认)
RGB_565 每个像素占用2byte内存

在Android中,Bitmap的存储分为两部分,一部分是Bitmap的数据,一部分是Bitmap的引用。 在Android2.3时代,Bitmap的引用是放在堆中的,而Bitmap的数据部分是放在栈中的,需要用户调用recycle方法手动进行内存回收,而在Android2.3之后,整个Bitmap,包括数据和引用,都放在了堆中,这样,整个Bitmap的回收就全部交给GC了,这个recycle方法就再也不需要使用了。

2.服务有几种启动方式?服务和Activty或服务之间怎么通信?

启动服务两种方式

1.startService

onCreate() --> onStartCommand() --> onDestroy()

2.bindService

onCreate() --> onBind() --> onUnbind() --> onDestroy()

bind的方式开启服务后,如果开启者被销毁了,它也会跟着一起销毁。绑定者可以调用服务里的方法。

3.通信方式

服务和Activity、服务和服务之间可以通过Binder对象、Broadcast(广播)进行通信。

3.Handler为什么会出现内存泄漏,为什么继承Handle就不会出现内存泄漏?

在使用Handler的时候,往往是需要在子线程中做耗时任务的,但是当任务未执行完就把该Handler所在的Activity销毁的话,它是无法被GC的。因为持有非静态内部类的引用是无法被内存回收,所以会出现内存泄露。

解决方法主要在于两点:

通过继承Handler就可以实现一个Handler静态内部类,还可以在构造方法中添加对外部Activity的弱引用。

public class MainActivity extends Activity {
    ......
 
    private final MyHandler mHandler = new MyHandler(this);
 
    private static class MyHandler extends Handler {
        private final WeakReference<MainActivity> mActivity;
 
        public MyHandler(MainActivity activity) {
            this.mActivity = new WeakReference<MainActivity>(activity);
        }
 
        @Override
        public void handleMessage(Message msg) {
          
        }
    }
}

4.在Activity中创建一个thread跟在service中创建一个thread之间的区别?

5.Bundle传递数据为什么需要序列化?

序列化,表示将一个对象转换成可存储或可传输的状态。

需要序列化的原因有三种情况:

  1. 永久性保存对象,将对象的字节序列存储到本地文件中;
  2. 对象在网络中传递
  3. 对象在IPC间传递
上一篇 下一篇

猜你喜欢

热点阅读