• [转载]android一些、面试题


    1.    请描述下Activity的生命周期。

          必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示

    (1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
    AAA --> onFreeze() --> onPause() --> onStop() --> onRestart() --> onStart(),onResume() …
    (2)用户点击Home,Actvity调用顺序如下
    AAA --> onFreeze() --> onPause() --> onStop() -- Maybe --> onDestroy() – Maybe
    (3)调用finish(), Activity调用顺序如下
    AAA --> onPause() --> onStop() --> onDestroy()
    (4)在Activity上显示dialog, Activity调用顺序如下
    AAA
    (5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
    AAA --> onFreeze() --> onPause()
    (6)设备进入睡眠状态,Activity调用顺序如下
    AAA --> onFreeze() --> onPause()

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

          onSaveInstanceState()

          当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。 

    3.    如何将一个Activity设置成窗口的样式。

          在AndroidManifest.xml 中定义Activity的地方一句话android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就变成半透明的

    4.    如何退出Activity?如何安全退出已调用多个Activity的Application?

    对于单一Activity的应用来说,退出很简单,直接finish()即可。

    当然,也可以用killProcess()和System.exit()这样的方法。

    http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

    1、抛异常强制退出:

    该方法通过抛异常,使程序Force Close。

    验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

    2、记录打开的Activity:

    每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

    3、发送特定广播:

    在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

    4、递归退出

    在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

    除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。

    但是这样做同样不完美。

    你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。

    但至少,我们的目的达到了,而且没有影响用户使用。

    为了编程方便,最好定义一个Activity基类,处理这些共通问题。

    5.    请介绍下Android中常用的五种布局。

    FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)

    6.    请介绍下Android的数据存储方式。

    Android提供了4种方式存储数据:

    --使用SharedPreferences存储数据;------------------解析的XML文件用来存储。

    --文件存储数据;----------------------输入输出流

    --SQLite数据库存储数据;

    --使用ContentProvider存储数据;--------------可以存储在SQLite里面,也可以存储在内容解析器(Android自带的一个解析类)里面。

    7.    请介绍下ContentProvider是如何实现数据共享的。

    创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。

    8.    如何启用Service,如何停用Service。

    服务类继承自service清单文件中注册 enabled属性设为true

    开始一个服务使用startservice方法,停止一个服务使用stopservice方法

    9.    注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

    引入广播机制可以方便几大组件的信息和数据交互。

    b:程序间互通消息(例如在自己的应用程序内监听系统来电)

    c:效率上(参考UDP的广播协议在局域网的方便性)

    d:设计模式上(反转控制的一种应用,类似监听者模式)

     

    10.    请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。

    android提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。

    1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

    2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息

    3) Message Queue(消息队列):用来存放线程放入的消息。

    4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

     

    11.    AIDL的全称是什么?如何工作?能处理哪些类型的数据?

    Android Interface Define Language见aidl的笔记

    12.    请解释下Android程序运行时权限与文件系统权限的区别。

     

     

    13.    系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

    14.    有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。

    15.    你如何评价Android系统?优缺点。

    5、一条最长的短信息约占多少byte?

    中文70(包括标点),英文160,160个字节。

     

    ANR:Application Not Responding,五秒。把耗时量大的任务放到新建的子线程中。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。

    16.Intentservice的 好处Activity的进程,当处理intent的时候,会产生一个对应的Service

    Android的进程处理器现在回尽可能的不kill掉你

     

     

    17.android中线程的处理方法

    每当一个程序第一次启动时候都会启动一个main thread 该线程主要处理与UI相关的事件,比如按键事件。

    子线程和ui的更新通过 handler处理msg消息队列使用sendmessage方法或者post方法post方法发送的是一个runnable对象。

    Looper是每条线程里的message queue的管家。因为子线程里没有mq所以调用looper里的getMainlooper方法这样得到的主线程的looper不为null。

    Looper。Loop方法运行开始后,循环的按照接受顺序取出非空的mq

    当sendmessage方法执行时 该函数设置了那个msg对象的target属性是当前的hander对象

    随后looper取出了那个msg则调用该msg的target只想的handler的dispatchMessage方法

    在该方法里用户指定三个判断优先级由高到低

    1)  meg里面的callback方法实现了一个runnable接口run函数做处理工作

    2)  handler里面的mcallback指向的一个实现了callback接口的对象由handlemessage处理

    3)  处理消息handler对象对应的类继承并且实现了其中handlemessage函数通过这个实现的handleMessage函数处理消息

    最后handler处理完message对象之后looper设置该msg对象为null以便回收

    主线程和子线程如何交互最终谁来处理信息?

    判断handler对象里面的looper对象属于哪条线程的则由该线程执行

    1)  当handler对象的构造函数为空时,说明looper是主线程的

     

     

    18.GBK  GB2312  UTF8之间的区别

    UTF8它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码

    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示

    GB2312和GBK是一样的

    19. 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?

    解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。

     

    20.在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件

     

    4、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

    答:一个activity呈现了一个用户可以操作的可视化界面

    一个service不包含可见的用户界面,可以在后台无限运行。可以连接到一个正在运行的服务中,连接后可以通过服务中的接口对其通信

    一个broadcast receiver 是一个接收广播消息并做出回应的组件。广播接收者没有界面

    一个intent是一个intent对象,他保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI。Intent对象可以显式的指定一个目标组件。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件中声明的.

     

     onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉

    为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。

     

  • 相关阅读:
    springboot redis多数据源
    springboot mybatis 多数据源配置
    java jackson 忽略不存在的属性字段 和 按照属性名转json
    java 四舍五入保留两位小数
    supervisord supervisorctl 问题supervisor.sock refused connection
    2
    1
    Python开发【程序】:三级菜单程序
    Python开发【第二章】:补充
    Python开发【第二章】:深浅拷贝剖析
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480802.html
Copyright © 2020-2023  润新知