码迷,mamicode.com
首页 > 移动开发 > 详细

近期面试总结(Android)

时间:2018-11-05 11:10:31      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:相对   ons   XML   lte   weak   bit   标准模式   构建   div   

关于近期面试总结(2018年下半年)

有些是老生常谈有些是没有遇到的。

1.HTTP和HTTPS的区别

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

  HTTPS和HTTP的区别主要如下:

  1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2.LaunchMode

  •  standard

  标准模式下,只要启动一次Activity,系统就会在当前任务栈新建一个实例。

  使用场景:正常的去打开一个新的页面,这种启动模式使用最多,最普通 。

  • :SingleTop 栈顶复用 

    1、当前栈中已有该Activity的实例并且该实例位于栈顶时,不会创建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewIntent()方法;
    2、当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例;
    3、当前栈中不存在该Activity的实例时,其行为同standard启动模式。
    使用场景:新闻详情页,收到推送打开新闻详情如果每次都创建新的实例显然浪费资源,如果singleTop复用,每次通过intent传入相应URI即可。

  • SingTask 栈内复用

    1、如果不存在指定的任务栈,系统会新建对应的任务栈,并新建Activity实例压入栈中。
    2、如果存在指定的任务栈,则会查找该任务栈中是否存在该Activity实例
          a、如果不存在该实例,则会在该任务栈中新建Activity实例。
          b、如果存在该实例,则会直接引用,并且回调该实例的onNewIntent()方法。并且任务栈中该实例之上的Activity会被全部销毁。
    使用场景:通过情况下我们把需要长时间保留在栈中的界面做成这种模式如APP首页,扫描二维码等。

  • SingleInstance

       启动该模式Activity的时候,会查找系统中是否存在: 1、不存在,首先会新建一个任务栈,其次创建该Activity实例。 

  2、存在,则会直接引用该实例,并且回调onNewIntent()方法。 特殊情况:该任务栈或该实例被销毁,系统会重新创建。

  使用场景:相机,相册,电话拨号等

3.Service不被杀死

  ①onStartCommand的时候手动返回START_STICKY会在内存充足的时候重新创建serivce,不保留传入的Intent

@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
    flags = START_STICKY;  
    return super.onStartCommand(intent, flags, startId);  
}  

  ②提升service优先级在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,越大优先级越高

  ③可以在service的onDestory方法中通过广播触发重启service

  ④监听系统某些广播拉起service比如重启手机,界面唤醒,网络切换等缺点是可能混乱

  ⑤双进程互相监听,主流应用搜狐,360,微信等都是。

4.Handler与weakReference解决可能导致内存泄漏

  为解决handler持有activity的引用可能导致内存泄漏,我们通常将Handler定义为静态内部类,但是这样我们不能操作activity中的内容,通过使用弱引用可以解决。

   

static class MyHandler extends Handler {
    WeakReference<Activity > mActivityReference;

    MyHandler(Activity activity) {
        mActivityReference= new WeakReference<Activity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        final Activity activity = mActivityReference.get();
        if (activity != null) {
            mImageView.setImageBitmap(mBitmap);
        }
    }
}

WeakReference弱引用,与强引用(即我们常说的引用)相对,它的特点是,GC在回收时会忽略掉弱引用,即就算有弱引用指向某对象,但只要该对象没有被强引用指向(实际上多数时候还要求没有软引用,但此处软引用的概念可以忽略),该对象就会在被GC检查到时回收掉。对于上面的代码,用户在关闭Activity之后,就算后台线程还没结束,但由于仅有一条来自Handler的弱引用指向Activity,所以GC仍然会在检查的时候把Activity回收掉。这样,内存泄露的问题就不会出现了。

 

 

  

 

近期面试总结(Android)

标签:相对   ons   XML   lte   weak   bit   标准模式   构建   div   

原文地址:https://www.cnblogs.com/yjpjy/p/9907599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!