zoukankan      html  css  js  c++  java
  • android关键知识

    1、handler 与Looper 与MessageQueue 、Message关系

     handler:是处理主线程(ui线程)处理耗时操作的线程,通过post message到MessageQueue队列中。使用handler须要实现 handlerMessage方法,通过更新主线程ui

    Looper:每一个Looper相应一个MessageQueue,在handler之前Looper.prepare()会初始化looper和MessageQueue。最后Looper.loop方法会去循环分发message到指定的handler,改api方法中有一句 msg.target.dispatchMessage(msg);   这就是looper和handler之间的调用


    2、hander与 AsyncTask的优缺点 

    AsyncTask实现的原理和适用的优缺点

    AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步运行的程度(能够通过接口实现UI进度更新),最后反馈运行的结果给UI主线程.

    使用的长处:

    简单,快捷

    过程可控      

    使用的缺点:

    在使用多个异步操作和并须要进行Ui变更时,就变得复杂起来.


    Handler异步实现的原理和适用的优缺点

    在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)执行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进行UI变更。

    使用的长处:

    结构清晰,功能定义明白

    对于多个后台任务时。简单,清晰

    使用的缺点:

     在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)



    3、android里面几种常见的存储方式

      a、Content provider

                1) ContentProvider为存储和读取数据提供了统一的接口

                2) 使用ContentProvider,应用程序能够实现数据共享

                3) android内置的很多数据都是使用ContentProvider形式,供开发人员调用的(如视频,音频。图片,通讯录等)

               首先在Androidmanifest.xml中注冊provider权限,然后通过getContentResolver() 然后得到contentResolver()对象 能够对该应用进行类似数据库操作一样的增删改成,须要的參数是uri  和參数值,查询一般得到游标Cursor  通过遍历游标获取属性值

      b、SharedPreferences

      实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences经常使用来存储一些轻量级的数据. 通过getSharedPreferences()得到改SharedPreferences对象  然后得到edit对象用来put值到改对象中。最后须要edit.commit()来将改对象存储到文件里,最后是以文件形式保存在data/data的指定路径下

      c、sqlite存储 

      SQLite是一种轻量级的小型数据库,尽管比較小,可是功能相对照较完好,一些常见的数据库基本功能也具有,在如今的嵌入式系统中使用该数据库的比較多。由于它占用系统资源非常少

       须要继承SQLiteOpenHelper 然后helper.getWritableDatabase() 得到SQLiteDatabase 对象,该对象能够对数据进行增删改查操作,提供了key value形式的CURD方法

      d、io流存储

     

      e、webview网络存储

    4。listview你是怎么优化的。

    用viewHolder和convertview优化内存,降低view的实例化个数,当item1被滑出屏幕时。这时不须要创建新的item1的view实例,android里面提供了Recycler(重复循环器)构件,并且viewHolder是静态类,最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时又一次使用就可以。

    4.1,listview图片载入优化

    1. decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完毕decode。
    无需再使用java层的createBitmap,从而节省了java层的空间,而且设置图片的压缩比例,从而缩小内存使用

    InputStream is = this.getResources().openRawResource(R.drawable.pic1);
    BitmapFactory.Options options=new BitmapFactory.Options();
    options.inJustDecodeBounds = false;
    options.inSampleSize = 10; //width。hight设为原来的十分一
    Bitmap btp =BitmapFactory.decodeStream(is,null,options);,
    2.回收图片缓存

     if(!bmp.isRecycle() ){
    bmp.recycle() //回收图片所占的内存
    system.gc() //提醒系统及时回收
    }



    5,view的刷新,之前说过

          View 能够调用invalidate()和postInvalidate()这两个方法刷新

    6,IPC及原理


    7,Android多线程


    8。Android为什么要设计4大组件,他们之间的联系。不设计行不行(主要是为了实现MVC模式。然而java中最难的模式也是这个,非常少有产品能将这个模式做得非常好【Technicolor的面试官问的这个】)


    9,service的周期。activity的周期,谈下你对Android内部应用的了解,比方他做电话,以及联系人等等应用。框架层有非常多东西还是多看看。熟悉Android怎么做的,无论你做应用程开发还是应用框架层开发非常有优点。


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    [置顶] windows player,wzplayerV2 for windows
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    ffmpeg for ios 交叉编译 (支持i686 armv7 armv7s) 包含lame支持
    编译cegcc 0.59.1
    wzplayer 近期将会支持BlackBerry和WinPhone8
    wzplayerEx for android(真正硬解接口,支持加密的 player)
    windows player,wzplayerV2 for windows(20140416)更新
    编译cegcc 0.59.1
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4750555.html
Copyright © 2011-2022 走看看