• Android相关知识


    1. Android四大组件:

      Activity:程序与用户交互的窗口,初始化界面

      service:后台服务于Activity,封装有一个完整的功能逻辑实现

      ContentProvider:是Android提供的第三方应用数据访问方案,可以派生Content Provider 类,对外提供数据

      BroadCast Receiver:接受一种或者多种intent做触发事件,然后封装成notification,统一了android的时间广播模型

    2.android的五种常用布局:五个布局嵌套使用,可以做出很好的效果

      LinearLayout:线性布局,分为垂直布局和水平布局

      RelativeLayout:相对布局,相对参照物来布局

      FrameLayout:

      AbsoluteLayout:绝对布局:绝对布局用X,Y的坐标来定义元素的位置,很少用吧

      TableLayout:表格布局:每一个TableLayout里面有多个TableRow

    3.android中的动画分为哪几种,他们的特点和区别是什么?

    4.android里面有哪几类解析xml的类,官方推荐哪几种,以及他们的区别?

      XML解析主要有三种,SAX,DOM,PULL。常规在pc上开发我们使用DOM相对轻松些,但是一些性能敏感的手机和数据库上我们还是采用SAX方式,

      不占内存空间,读取是单向的,但是对于解析属性来说不是很方便。DOM会把整个XML读进内存,如果数据量不是很大的话,推荐这种方式。

    5.ListView的优化方案

      1.自定义适配器:重写getView方法,参数中的contentview是不是null,不是的话就创建,是的话就重复利用

      2.如果数据量很大的话,可以考虑分页加载

    6.android的数据存储方式:SharedPreferences 文件数据存储 SQLite数据库存储  ContentProvider存储数据  网络存储数据

      SharedPreferences: 是存储一些简单的配置信息的一种方式

      文件存储方式:和java的文件存储方式一样

      SQLite数据库:内置的轻量级数据库

      ContentProvider:这个还要看一看---------------------

    7.activity的启动模式有哪些?分别是什么含义?

      standard  singleTop  singleTask   singleInstance

      1.如何决定所属Task:standard和singleTop都是和启动着是在同一个Task中的,而后两种则是以Activity作为Task的基元素

      2.前两种允许多个实例,存在不同的task中,一个Task也可以包含多个实例,而后两种只限制生成一个实例,并且是Task的根元素

      3.是否允许其他activity在本Task内:singleInstance独占一个Task

      4.是否每次都生成新实例:standard都会生成新实例,singleTop如果task在栈顶的话,不生成新实例,直接使用新实例,否则就会创建一个新实例

        singleInstance不允许有其他的Activity所以每次都会重用,singleTask如果在栈顶则接受intent,否则就抛弃,但是该Task仍会回到前台。

    8.跟activity和Task有关的Intent启动方式有哪些?其含义?

      FLAG_ACTIVITY_NEW_TASK    FLAG_ACTIVITY_CLEAR_TOP  FLAT_ACTIVITY_SINGLE_TOP  

    9.请描述ACTIVITY的生命周期

    10.Activity在屏幕旋转时的生命周期

      不设置Activity的android:configChanges时,切屏会重新调用个生命周期,切横屏是执行一次,切竖屏时执行两次,设置android:orientation时,

       切换横竖屏只执行一次设置Activity的android:configureChanges=“orientation|keyboardHidden” 时,切屏时不会重新调用各个生命周期。

    11.如何启动service,如何停止service

      1.继承自service类    public  class SMSService extends Service{}

      2.在AndroidManifest.xml文件中的<application>节点中对服务进行配置 <service android:name=".SMSService">

        服务不能自己运行,需要调用Context.startService()或Context.bindServie()方法启动服务。这两种方法的启动场合不同,

        使用startService()启动服务,调用者与服务之间没有关联,即使调用者退出了,服务仍然运行。使用bindService()方法启动

        服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止了。使用startService()方法启动服务只能通过context.stopService()

        来结束服务,服务结束会调用onDestroy方法。使用bindService()也只能通过unbindService()来停止服务。

    12.注册广播有哪几种方式,这些方式有何优缺点?谈谈android引入广播机制的用意

    13.请解释单线程模型下的Message Handler Message Queue Looper之间的关系

      Handler用来获取当前线程中的Looper对象,Looper用来从Message Queue中获取Message,再由handler进行分发和处理

      Message Queue:消息队列,用来存放通过handler发布的消息,可以通过Looper.myQueue得到当前线程的消息队列

      Looper:是handler和消息队列之间的桥梁

      Message:消息的类型,是线程间交流信息,处理数据的后台线程需要更新UI,则发送Message内含一些数据给UI线程。最好通过

          Message.obtain()或者Handler.obtainMessage()来获取Message对象来提高效率

    16.什么是ANR,如何避免它?

      ANR:Application not   Responding,在UI主线程或者BroadcastReceiver在10s内没有执行完毕,就会出现应用程序无响应。

      避免方法:更少的去创建东西,让耗时的任务放到子线程中去完成,主线程提供一个handler确保子线程执行完毕后可以把结果提交

      给主线程。

    17.什么情况下导致Force close?如何避免

      当程序出现异常时

      避免:在写程序的时候要思维缜密,能过捕获异常,在logcat中能看到异常的信息

    18.描述一下android的系统架构

      android架构从下往上依次是  linux内核层   运行库     应用程序框架层    应用程序层

      要想写出优质高效的代码,就必须对整个applicationframework有深入的理解,也就能驾驭整个开发

    19.contentprovider是如何实现共享的

    20.Sevice和Thread的区别?

      Thread:是程序执行的最小单元,他是分配cpu的基本单位,可以用thread来执行一些异步的操作

      Sevice:

      如果service是一种服务,我们可以在有context的地方调用函数来控制它,但是Thread是做不到的

    21.android api本身没有抛出异常,则其在运行的时候,会不会抛出runtime异常?

    会的,比如空指针,没有获得权限等等,可以查看logcat

    22.IntentService有何优点 ?

    23.如果后台activity由于某种原因被系统回收了,如何在被系统回收之前保存当前状态?

        重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity回收之前调用。通过重写onRestoreInstanceState()方法可以

        从中提取出保存好的数据。把数据写入配置文件,然后需要时从中读出,这就类似于

    36.如何将SQlite数据库与apk文件一起发布?

      可以将*.db拷贝到res/raw文件夹下,这个目录下的文件不会被压缩,这样在第一次读取数据库的时候,就要将数据库文件拷贝到复制到手机的某个文件夹下,

      再打开数据库,拷贝的方法getResources().openRawResource方法获得inputStream,然后在写入到文件中,,在sdk中通过SQLiteDatabase.openOrCreateDatabase()来打开数据库文件

    39.java如何引用本地语言

      可以通过JNI接口

    41.NDK是什么?

      NDK是一系列工具的集合,可以帮助开发者迅速开发C/C++的动态库,并能自动将so和java应用打成apk包。交叉编译器,并提供了相应的mk文件隔离cpu

    平台等的差异,开发人员至于简单的修改就可以创建出so

    网址:http://blog.csdn.net/ihrthk/article/details/7338834

  • 相关阅读:
    iOS开发
    Xcode
    UITextField
    iOS
    过场动画
    iOS 网络状态监听和检查,
    线程互动,GCD小应用,(功能实现并代码聚集---加载动画,弹框AlertView定时消失。)
    drawRect: 小注
    FMDB_and_Sqlite3
    UIGestureRecognizer手势。
  • 原文地址:https://www.cnblogs.com/zhanglanyun/p/2557047.html
Copyright © 2020-2023  润新知