Android面试题(766游戏网官网1)

1. 下列哪些语句关于内存回收的辨证是科学的? (b )

A、 程序员必须创设一个线程来刑释解教内存

B、 内存回收程序负担释放无用内存 

C、 内存回收程序同意程序员直接出狱内存 

766游戏网官网,D、 内存回收程序能够在指定的日子释放内存对象 

Android是Linux的水源,每一个主次都是一个独自的JAVA虚拟机,就和油汤里的油花一样互不烦扰,这样丰硕保证了一旦某部程序的JAVA虚拟机崩溃,系统依旧平稳健康运行.
而Android和历史观Linux不一致的地点又在于,传统Linux在
进程活动停止后就终止了,这就象是于大家用S60和WM一
样,关闭程序,内存释放.而Android会把这些过程保留在内存里,干嘛呢?为了确保你重新激活那多少个经过时候启动的更快.Android会在系统需要更多内存
的时候,去自由掉这一个占据内存的经过—-那一个活动是智能的.

2. 下边分外是属于Runtime Exception 的是(abcd)(多选)

A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

A、ArithmeticException    

当出现异常的运算条件时,抛出此丰盛。例如,一个平头“除以零”时,抛出此类的一个实例。

B、IllegalArgumentException

抛出的这么些讲明向方法传递了一个不合法或不正确的参数。

C、NullPointerException

空指针至极

D、BufferUnderflowException
(不了然,没遭逢过)

编码问题造成java_BufferUnderflowException异常

公共类BufferUnderflowException的延伸的RuntimeException未经检查的非凡时,抛出一个针锋相对get操作达到源缓冲区的范围。

3.  Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c).

A、11 ,-11   B、11 ,-12   C、12 ,-11   D、12 ,-12

四舍五入 四和五是指正的4,5
-11.5 这么看 -11.5 = -12 +0.5   ,0.5按四舍五入为1 ,-12+1 =
-11,所以Math.round(-11.5)==-11
           -0.5 = -1 + 0.5   0.5按四舍五入为1 ,-1+1 =
0,所以Math.round(-0.5)==0
            11.5 四舍五入 分明 Math.round(11.5)==12

round方法再次回到与参数最相近的长整数,参数加0.5后求其floor(小于等于该数的最大整数)

4. 下列程序段的出口结果是:(b)

void complicatedexpression_r(){
     int x=20, y=30;
     boolean b;
     b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
     System.out.println(b);
}

A、true B、false C、1 D、0

&&(与)的优先级比||(或)高

5. 对有的资源以及气象的操作保存,最好是保留在生命周期的哪位函数中展开(a)

A、onPause()  B、onCreate()   C、 onResume()   D、onStart()

6. Intent传递数据时,下列的数据类型哪些能够被传送(abcd)(多选)

A、Serializable  B、charsequence  C、Parcelable  D、Bundle

7. android 中下列属于Intent的功能的是(c)

A、实现应用程序间的数目共享

B、是一段长的生命周期,没有用户界面的主次,可以保持利用在后台运行,而不会因为切换页面而泯没

C、可以实现界面间的切换,可以涵盖动作和动作数据,连接四大组件的问题

D、处理一个应用程序全体性的行事

8. 下列属于SAX解析xml文件的优点的是(b)

A、将总体文档树在内存中,便于操作,匡助删除,修改,重新排列等多种效能(dom解析优点)

B、不用事先调入整个文档,占用资源少(sax解析优点)

C、整个文档调入内存,浪费时间和空间(dom解析缺点)

D、不是遥远驻留在内存,数据不是坚贞不屈不懈的,事件过后,若没有保留数据,数据就会(sax解析缺点)消失

不需要像dom解析这样在内存中建立一个dom对象,占用内存,sax解析是逐行解析的,每回读入内存的只是一行xml,所以速度快,功效高点。可是sax一般是处理固定格式的xml。

9. 下边的对自定style的艺术不错的是(a)

  A、

<resources>
<style name="myStyle">
<item name="android:layout_width">fill_parent</item>
</style>
</resources>

B、

<style name="myStyle">

<item name="android:layout_width">fill_parent</item>

(没有<resources>

)

   </style>

C、

<resources>
<item name="android:layout_width">fill_parent</item>

(没有</style>

)
</resources>

D、

<resources>
<style name="android:layout_width">fill_parent</style>

(</style>应为</item>

)
</resources>

10.   在android中选用Menu时或许需要重写的方法有(ac)。(多选)

A、onCreateOptionsMenu() 

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

11.  在SQL Server Management Studio 中运作下列T-SQL语句,其输出值(c)。

SELECT @@IDENTITY

A、可能为0.1

B、可能为3

C、 不可以为-100

D、肯定为0

@@identity是象征的是最近四回向装有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@起始,用户自定义变量以@开始。比如有个表A,它的自增列是id,当向A表插入一行数据后,如若插入数据后自增列的值自动扩充至101,则通过select
@@identity得到的值就是101。使用@@identity的前提是在进展insert操作后,执行select
@@identity的时候总是没有停歇,否则拿到的将是NULL值。

12. 在SQL Server 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之后的结果是(d)。

BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHERE qty<40
Update SALES Set qty=50 WHERE qty<50
Update SALES Set qty=60 WHERE qty<60
COMMIT TRANSACTION B
COMMIT TRANSACTION A

A、SALES表中qty列最小值超越等于30

B、SALES表中qty列最小值大于等于40

C、SALES表中qty列的数量总体为50

D、SALES表中qty列最小值超过等于60

Update SALES Set qty=60 WHERE
qty<60(关键在终极一句,执行完数据就都是超出等于60了)

13.  在android中利用SQLiteOpenHelper这么些协理类时,可以生成一个数据库,并可以对数据库版本举行管理的法子能够是(ab)

A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

14. android 关于service生命周期的onCreate()和onStart()说法科学的是(ad)(多选题)

A、当第一次启动的时候先后调用onCreate()和onStart()方法

B、当第一次开行的时候只会调用onCreate()方法

C、尽管service已经起步,将先后调用onCreate()和onStart()方法

D、假设service已经启动,只会执行onStart()方法,不在执行onCreate()方法

15. 下面是属于GLSurFaceView特性的是(abc)(多选)

A、管理一个华为平板,这些三星GALAXY Tab就是一块优良的内存,能直接排版到android的视图view上。

B、管理一个EGL display,它能让opengl把内容渲染到上述的三星GALAXY Tab上。

C、让渲染器在单身的线程里运行,和UI线程分离。

D、能够直接从内存依旧DMA等硬件接口取得图像数据

 GLSurfaceView是一个视图,继承至SurfaceView,它内嵌的平板电脑专门负责OpenGL渲染。

       
GLSurfaceView提供了下列特征:

                1>
管理一个平板电脑,那么些平板电脑就是一块杰出的内存,能直接排版到android的视图view上。

                2> 管理一个EGL
display,它能让opengl把内容渲染到上述的华为平板上。

                3>
用户自定义渲染器(render)。

                4>
让渲染器在独立的线程里运行,和UI线程分离。

                5>
援助按需渲染(on-demand)和连续渲染(continuous)。

                6>
一些可选工具,如调试。

16. 下边在AndroidManifest.xml文件中登记布罗德(Broad)castReceiver情势正确的(a)

A、

<receiver android:name="NewBroad">
   <intent-filter>
      <action   android:name="android.provider.action.NewBroad"/>
      <action>
   </intent-filter>
</receiver>

B、

<receiver android:name="NewBroad">
<intent-filter>
                 android:name="android.provider.action.NewBroad"/>
</intent-filter>
</receiver>

C、

<receiver android:name="NewBroad">
<action    android:name="android.provider.action.NewBroad"/>
<action>
</receiver>

D、

<intent-filter>
         <receiver android:name="NewBroad">

            <action> android:name="android.provider.action.NewBroad"/>
             <action>
         </receiver>
</intent-filter>

17. 关于ContenValues类说法科学的是(a)

A、他和Hashtable相比较相近,也是肩负储存一些名值对,但是她存储的名值对中间的名是String类型,而值都是主旨类型

B、他和Hashtable相比较相近,也是负责储存一些名值对,不过她存储的名值对中级的名是随机档次,而值都是中央类型

C、他和Hashtable相比较相近,也是负责储存一些名值对,然而她存储的名值对中间的名,可以为空,而值都是String类型      

D、他和Hashtable相比较像样,也是负责储存一些名值对,可是她存储的名值对中级的名是String类型,而值也是String类型

18. 大家都知晓Hanlder是线程与Activity通信的桥梁,假设线程处理不当,你的机械就会变得越慢,那么线程销毁的主意是(a)

A、onDestroy() 

B、onClear()

C、onFinish() 

D、onStop()

19. 上面退出Activity错误的章程是(c)

A、finish()

B、抛非凡强制退出

C、System.exit()  

D、onStop()

System.exit(0) 0是常规退出
,其他数字是代表不健康退出

20. 下面属于android的动画片分类的有(ab)(多项)

A、Tween  B、Frame C、Draw D、Animation

Animation紧要有三种动画情势:
一种是tweened animation(渐变动画)                  一种是frame by frame(画面转换动画)

XML中       
JavaCode                                            XML中          JavaCode

alpha          
AlphaAnimation                                 translate      TranslateAnimation

scale          
ScaleAnimation                                  rotate            RotateAnimation

21. 下边关于Android dvm的过程和Linux的过程,应用程序的进程说法科学的是(d)

A、DVM指dalivk的虚构机.每一个Android应用程序都在它自己的进程中运行,不自然有所一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux
中的一个经过,所以说可以认为是同一个概念.

B、DVM指dalivk的杜撰机.每一个Android应用程序都在它和谐的长河中运作,不自然有所一个单独的Dalvik虚拟机实例.而每一个DVM不必然都是在Linux
中的一个过程,所以说不是一个概念.

C、DVM指dalivk的杜撰机.每一个Android应用程序都在它自己的历程中运作,都富有一个独门的Dalvik虚拟机实例.而每一个DVM不肯定都是在Linux
中的一个历程,所以说不是一个概念.

D、DVM指dalivk的虚构机.每一个Android应用程序都在它和谐的进程中运作,都有着一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux
中的一个历程,所以说可以认为是同一个概念.

22.  Android项目工程下边的assets目录的效劳是如何(b)

A、放置应用到的图片资源。

B、首要放置多媒体等数据文件

C、放置字符串,颜色,数组等常量数据

D、放置一些与UI相应的布局文件,都是xml文件

23.  关于res/raw目录说法科学的是(a)

A、 这里的公文是原封不动的存储到设备上不会更换为二进制的格式

B、 这里的公文是原封不动的囤积到设备上会转换为二进制的格式

C、 这里的文件最后以二进制的格式存储到指定的包中

D、 这里的文件最后不会以二进制的格式存储到指定的包中

24.  下列对android NDK的知情科学的是(abcd)

A、 NDK是一名目繁多工具的集结

B、 NDK 提供了一份平静、功用有限的 API 头文件宣称。

C、 使 “Java+C” 的开发形式终于转正,成为官方协理的开发格局

D、 NDK 将是 Android 平台支撑 C 开发的发端

25.  android中常用的五个布局是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)和TableLayout(表格布局)。

26.  android 的四大组件是activity,service,broadcast和Content Provider。

27.  java.io包中的objectinputstream和objectoutputstream类紧要用于对目的(Object)的读写。

28.  android 中service的兑现格局是:startservice和bindservice。

Service的生命周期方法比Activity少一些,只有onCreate,
onStart, onDestroy
。我们有二种情势启动一个Service(Service),他们对Service(Service)生命周期的熏陶是不雷同的。
1 通过startService
Service会经历 onCreate –> onStart
stop瑟维斯(Service)的时候直接onDestroy
比方是 调用者
直接退出而尚未调用stopService(Service)的话,Service会平昔在后台运行。
下次调用者再起来还能够stopService。
2 通过bindService
Service只会运行onCreate, 那么些时候 调用者和Service绑定在一起
调用者退出了,Srevice就会调用onUnbind–>onDestroyed
所谓绑定在同步就共存亡了。 

  1. Started
    Service(Service)中拔取StartService(Service)()方法来进展艺术的调用,调用者和劳动期间从未交换,虽然调用者退出了,服务仍然在拓展【onCreate()- 
    >onStartCommand()->start瑟维斯(Service)(Service)()->onDestroy()】,注意其中没有onStart(),紧如若被onStartCommand()方法给代表了,onStart方法不引进应用了。

2.
BindService中行使bindService(Service)()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就停下了【onCreate()->onBind()->onUnbind()->onDestroy()】。

29.  activity一般会重载7个法子用来保安其生命周期,除了onCreate(),onStart(),onDestory()  外还有onrestart,onresume,onpause,onstop。

30.  android的数额存储的方法sharedpreference,文件,SQlite,contentprovider,网络。

31. 当启动一个Activity并且新的Activity执行完后需要回到到启动它的Activity来执行 的回调函数是startActivityForResult

startActivityForResult(Intent,requestCode)//启动一个activity包含参数请求码和具体的intent数据,其中请求码可以用来识别子活动。

32. 请使用命令行的艺术创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,名字为scard.img, 并指定屏幕大小HVGA.________________android create acd -n myAvd -t 8 -s HVDA – C d:\card.img____________________。

33.  程序运行的结果是:_____good and gbc__________。

public class Example{ 
  String str=new String("good"); 
  char[]ch={'a','b','c'}; 
  public static void main(String args[]){ 
    Example ex=new Example(); 
     ex.change(ex.str,ex.ch); 
    System.out.print(ex.str+" and "); 
    Sytem.out.print(ex.ch); 
  } 

  public void change(String str,char ch[]){ 
    str="test ok"; 
    ch[0]='g'; 
  } 
}

34.  在android中,请简述jni的调用过程。

1)安装和下载Cygwin,下载 Android
NDK

2)在ndk项目中JNI接口的计划

3)使用C/C++实现本地点法

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

35. 简述Android应用程序结构是何等?

Android应用程序结构是:

Linux
Kernel(Linux内核)、Libraries(系统运行库或者是c/c++主题库)、Application 
Framework(开发框架包)、Applications(核心应用程序)

36. 请继承SQLiteOpenHelper实现:

1).成立一个版本为1的“diaryOpenHelper.db”的数据库,

2).同时创造一个 “diary”
表(包含一个_id主键并自增长,topic字符型100长度,
content字符型1000长度)

3).在数据库版本变化时请删除diary表,并再一次创立出diary表。

public class DBHelper  extends SQLiteOpenHelper {

    public final static String DATABASENAME = "diaryOpenHelper.db";
    public final static int DATABASEVERSION = 1;

    //创建数据库
    public DBHelper(Context context,String name,CursorFactory factory,int version){
        super(context, name, factory, version);
    }

    //创建表等机构性文件
    public void onCreate(SQLiteDatabase db){
        String sql ="create table diary"+"("+"_id integer primary key autoincrement,"+"topic varchar(100),"+"content varchar(1000)"+")";
        db.execSQL(sql);
    }

    //若数据库版本有更新,则调用此方法
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
        String sql = "drop table if exists diary";
        db.execSQL(sql);
        this.onCreate(db);
    }
}

37. 页面上幸存ProgressBar控件progressBar,请用书写线程以10秒的的岁月成功其速度彰显工作。

public class ProgressBarStu extends Activity {
    private ProgressBar progressBar = null;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progressbar);
        //从这到下是关键
        progressBar = (ProgressBar)findViewById(R.id.progressBar);
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int progressBarMax = progressBar.getMax();
                try {
                    while(progressBarMax!=progressBar.getProgress()){
                        int stepProgress = progressBarMax/10;
                        int currentprogress = progressBar.getProgress();
                        progressBar.setProgress(currentprogress+stepProgress);
                        Thread.sleep(1000);
                    }
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });
        thread.start();
        //关键结束
    }
}

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

必调用的两个形式:onCreate() –> onStart() –>
onResume(),用AAA表示

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

39. 只要后台的Activity由于某原因被系统回收了,咋样在被系统回收在此以前封存当前气象?

onSaveInstanceState()

当您的程序中某一个Activity
A在运作时,主动或被动地运转另一个新的Activity
B,这一个时候A会实施onSaveInstanceState()。B完成之后又会来找A,这一个时候就有两种状态:一是A被回收,二是A没有被回收,被回收的A就要重复调用onCreate()方法,不同于直接开行的是这回onCreate()里是带上了参数savedInstanceState;而没被废除的就一向实施onResume(),跳过onCreate()了。

40. 什么将一个Activity设置成窗口的体裁。

在AndroidManifest.xml 中定义Activity的地点一句话

android:theme=”@android:style/Theme.Dialog”或android:theme=”@android:style/Theme.Translucent”

就成为半晶莹剔透的

41. 怎么着退出Activity?如何安全退出已调用几个Activity的Application?

对于单一Activity的采用来说,退出很简短,直接finish()即可。当然,也足以用killProcess()和System.exit()这样的艺术。

对于四个:

1、抛分外强制退出:
该措施通过抛十分,使程序Force
Close。验证可以,不过,需要解决的问题是,咋样使程序截至掉,而不弹出Force
Close的窗口。
2、记录打开的Activity:
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
3、发送特定广播:
在急需收尾应用时,发送一个一定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在开拓新的Activity时接纳startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

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

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

43. 请介绍下Android的数目存储模式。

一.SharedPreferences方式

二.文本存储模式

三.SQLite数据库形式

四.内容提供器(Content
provider)格局

五. 网络存储情势

44. 请介绍下ContentProvider是什么样实现数据共享的。

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

45. 怎么着启用Service(Service),如何停用瑟维斯(Service)(Service)。

Android中的service类似于windows中的service,service一般没有用户操作界面,它运行于系统中不便于被用户发现,可以运用它支付如监控之类的顺序。

一、步骤

第一步:继承Service类

public class SMSService extends Service {
}

其次步:在AndroidManifest.xml文件中的<application>节点里对劳动举行部署:

<service android:name=”.DemoService”
/>

二、Context.startService()和Context.bindService

劳动不可能和谐运行,需要经过调用Context.start瑟维斯(Service)(Service)()或Context.bind瑟维斯(Service)()方法启动服务。这两个形式都足以启动Service(Service),不过它们的行使场合有所不同。

1.拔取start瑟维斯(Service)(Service)()方法启用服务,调用者与服务期间从未牵涉,即便调用者退出了,服务仍旧运行。使用bindService()方法启用服务,调用者与服务绑定在了协同,调用者一旦退出,服务也就止住。

2.运用Context.start瑟维斯()方法启动服务,在劳动未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。假使调用startService(Service)()方法前服务已经被成立,多次调用start瑟维斯(Service)(Service)()方法并不会招致多次创办服务,但会促成多次调用onStart()方法。拔取startService(Service)()方法启动的劳动,只可以调用Context.stopService()方法为止劳动,服务截止时会调用onDestroy()方法。

3.施用Context.bindService(Service)()方法启动服务,在劳务未被创制时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。那多少个时候调用者和劳务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,。接着调用onDestroy()方法。如若调用bindService(Service)()方法前服务一度被绑定,多次调用bind瑟维斯(Service)()方法并不会招致多次创办服务及绑定(也就是说onCreate()和onBind()方法并不会被反复调用)。假使调用者希望与正在绑定的劳动解除绑定,可以调用unbindService(Service)()方法,调用该办法也会导致系统调用服务的onUnbind()–>onDestroy()方法。

三、Service的生命周期

1.Service常用生命周期回调方法如下:

onCreate()该方法在服务被成立时调用,该措施只会被调用四遍,无论调用多少次startService()或bind瑟维斯(Service)(Service)()方法,服务也只被创造一遍。
onDestroy()该模式在服务被截至时调用。

2.
Context.start瑟维斯(Service)(Service)()启动瑟维斯(Service)有关的生命周期方法onStart()只有使用Context.startService()方法启动服务时才会回调该办法。该办法在劳务最先运行时被调用。多次调用startService(Service)()方法就算不会一再成立服务,但onStart()方法会被频繁调用。

3.
Context.bindService(Service)()启动瑟维斯(Service)有关的生命周期方法onBind()只有利用Context.bindService()方法启动服务时才会回调该模式。该格局在调用者与服务绑定时被调用,当调用者与劳务一度绑定,多次调用Context.bind瑟维斯(Service)()方法并不会促成该措施被一再调用。onUnbind()只有接纳Context.bindService(Service)()方法启动服务时才会回调该方法。该方法在调用者与劳动解除绑定时被调用。

备注:

  1. 接纳start瑟维斯(Service)()启动服务

Intent intent = new Intent(DemoActivity.this, DemoService.class

);
startService(intent);

2.Context.bindService()启动

Intent intent = new Intent(DemoActivity.this, DemoService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE); //unbind瑟维斯(Service)(Service)(conn);//解除绑定

46. 登记广播有三种方法,这个措施有何优缺点?请谈谈Android引入广播机制的来意。

Android广播机制(几种注册模式)

在android下,要想接受广播新闻,那么那多少个广播接收器就得我们协调来贯彻了,我们得以继承布罗德castReceiver,就能够有一个广播接受器了。有个接受器还不够,我们还得重写布罗德castReceiver里面的onReceiver方法,当来播音的时候我们要怎么,这就要我们温馨来贯彻,但是大家可以搞一个信息防火墙。具体的代码:

public class SmsBroadCastReceiver extends BroadcastReceiver    
{   
    @Override  
    public void onReceive(Context context, Intent intent){   
        Bundle bundle = intent.getExtras();   
        Object[] object = (Object[])bundle.get("pdus");   
        SmsMessage sms[]=new SmsMessage[object.length];   
        for(int i=0;i<object.length;i++){   
            sms[0] = SmsMessage.createFromPdu((byte[])object[i]);   
            Toast.makeText(context, "来自"+sms[i].getDisplayOriginatingAddress()+" 的消息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show();   
        }   
        //终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。   
        abortBroadcast();   
    }   
}

当落实了广播接收器,还要设置广播接收器接收播放消息的档次,这里是消息:android.provider.Telephony.SMS_RECEIVED
大家就足以把广播接收器注册到系统内部,可以让系统通晓我们有个广播接收器。这里有三种,一种是代码动态注册:

//生成广播处理   
smsBroadCastReceiver = new SmsBroadCastReceiver();   
//实例化过滤器并设置要过滤的广播   
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
//注册广播   
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);

一种是在AndroidManifest.xml中配备广播

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
      package="spl.broadCastReceiver"  
      android:versionCode="1"  
      android:versionName="1.0">  
    <application android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".BroadCastReceiverActivity"  
                  android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <!--广播注册-->  
        <receiver android:name=".SmsBroadCastReceiver">  
            <intent-filter android:priority="20">  
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
            </intent-filter>  
        </receiver>  
     </application>   
    <uses-sdk android:minSdkVersion="7" />  
    <!-- 权限申请 -->  
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>        
</manifest>

二种注册类型的区别是:

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第三种是常驻型,也就是说当应用程序关闭后,如若有音讯播报来,程序也会被系统调用自动运行。

47. 请表达下在单线程模型中Message、Handler、Message Queue、Looper之间的涉及。

Handler简介:
一个Handler允许你发送和处理Message和Runable对象,这多少个目的和一个线程的MessageQueue相关联。每一个线程实例和一个单身的线程以及该线程的MessageQueue相关联。当你创建一个新的Handler时,它就和创设它的线程绑定在一块儿了。那里,线程我们也得以知道为线程的MessageQueue。从这点上来看,Handler把Message和Runable对象传递给MessageQueue,而且在这一个目标离开MessageQueue时,Handler负责执行他们。

Handler有六个重大的用途:(1)确定在将来的某个时间点执行一个如故有些Message和Runnable对象。(2)在此外线程(不是Handler绑定线程)中排入一些要执行的动作。

Scheduling
Message,即(1),能够通过以下方法成功:
post(Runnable):Runnable在handler绑定的线程上实施,也就是说不创建新线程。
postAtTime(Runnable,long):
postDelayed(Runnable,long):
sendEmptyMessage(int):
sendMessage(Message):
sendMessageAtTime(Message,long):
sendMessageDelayed(Message,long):
post那一个动作让你把Runnable对象排入MessageQueue,MessageQueue受到这么些音信的时候实施他们,当然以自然的排序。sendMessage这么些动作允许你把Message对象排成队列,这一个Message对象涵盖部分信息,Handler的hanlerMessage(Message)会处理这多少个Message.当然,handlerMessage(Message)必须由Handler的子类来重写。这是编程人士需要作的事。

当posting或者sending到一个Hanler时,你可以有三种表现:当MessageQueue准备好就处理,定义一个延迟时间,定义一个精确的大运去处理。后两者允许你兑现timeout,tick,和基于时间的一言一行。
当您的运用创造一个新的过程时,主线程(也就是UI线程)自带一个MessageQueue,那些MessageQueue管理顶层的拔取对象(像activities,broadcast
receivers等)和主线程创立的窗体。你可以创建自己的线程,并经过一个Handler和主线程举行通信。这和事先同一,通过post和sendmessage来完成,差距在于在哪一个线程中执行这么方法。在方便的时候,给定的Runnable和Message将在Handler的MessageQueue中被Scheduled。

 

Message简介:
Message类就是概念了一个信息,那个信息中含有一个讲述符和任意的数额对象,那些音信被用来传递给Handler.Message对象提供额外的五个int域和一个Object域,这足以让你在大多数意况下不用作分配的动作。
即便Message的构造函数是public的,可是获取Message实例的最好点子是调用Message.obtain(),或者Handler.obtainMessage()方法,那个方法会从回收对象池中拿走一个。

 

MessageQueue简介:
这是一个含有message列表的底部类。Looper负责分发这多少个message。Messages并不是一向加到一个MessageQueue中,而是通过MessageQueue.IdleHandler关联到Looper。
你可以经过Looper.myQueue()从眼前线程中得到MessageQueue。

 

Looper简介:
Looper类被用来举行一个线程中的message循环。默认意况,没有一个新闻循环关联到线程。在线程中调用prepare()创立一个Looper,然后用loop()来拍卖messages,直到循环终止。

 

多数和message
loop的交互是因此Handler。

下边是一个超人的盈盈Looper的线程实现。

class LooperThread extends Thread {
      public Handler mHandler;   
      public void run() {
          Looper.prepare();       
          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };     
          Looper.loop();
      }
  }

48.    AIDL的完备是何许?肿么办事?能处理哪些项目的数码?

AIDL的英文全称是Android Interface Define
Language

当A进程要去调用B进程中的service时,并贯彻通信,我们普通都是透过AIDL来操作的

A工程:

第一我们在com.yydcdut.mobile.aidlservice包中制造一个Remote瑟维斯(Service).aidl文件,在里面我们自定义一个接口,含有方法get。ADT插件会在gen目录下自动生成一个Remote瑟维斯(Service)(Service).java文件,该类中含有一个名为Remote瑟维斯(Service)(Service).stub的里边类,该内部类中含有aidl文件接口的get方法。

证实一:aidl文件的岗位不稳定,可以轻易

然后定义自己的MyService(Service)类,在My瑟维斯(Service)类中自定义一个里面类去继承RemoteService(Service).stub那一个里面类,实现get方法。在onBind方法中回到这么些里面类的对象,系统会活动将以此目的封装成IBinder对象,传递给他的调用者。

附带需要在AndroidManifest.xml文件中布置My瑟维斯(Service)类,代码如下:

<!-- 注册服务 -->  
<service android:name=".MyService"> 
   <intent-filter> 
   <!--  指定调用AIDL服务的ID  --> 
       <action android:name="net.blogjava.mobile.aidlservice.RemoteService" /> 
   </intent-filter> 
</service>

为啥要指定调用AIDL服务的ID,就是要告诉外界My瑟维斯(Service)(Service)那些类可以被此外进程访问,只要其它进程知道这多少个ID,正是有了这多少个ID,B工程才能找到A工程实现通信。

表达:AIDL并不需要权限

B工程:

     
首先大家要将A工程中生成的RemoteService.java文件拷贝到B工程中,在bind瑟维斯(Service)(Service)方法中绑定aidl服务

     
绑定AIDL服务就是将RemoteService的ID作为intent的action参数。

     
表达:假如我们单独将Remote瑟维斯(Service)(Service).aidl文件放在一个包里,这些在我们将gen目录下的该包拷贝到B工程中。如果我们将RemoteService.aidl文件和大家的另外类存放在一起,那么我们在B工程中就要建立相应的包,以保证Rmote瑟维斯(Service).java文件的申请正确,咱们无法修改RemoteService(Service).java文件

bindService(new
Inten(“net.blogjava.mobile.aidlservice.RemoteService”),
serviceConnection, Context.BIND_AUTO_CREATE);

      
Service(Service)Connection的on瑟维斯(Service)(Service)Connected(ComponentName name, IBinder
service)方法中的service参数就是A工程中MyService类中延续了RemoteService.stub类的中间类的对象。

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

运行时权限Dalvik( android授权)       
文件系统 linux 内核授权

50.  系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请证实原因。

透过直接发送Uri把参数带过去,或者经过manifest里的intentfilter里的data属性

51. 你怎么评价Android系统?优缺点。

亮点:开放性、挣脱运营商的约束、丰盛的硬件接纳、不受任何限制的开发商、无缝结合的Google应用

不足:安全和隐私
、首先开卖Android手机的不是最流年营商
、运营商还可以影响到Android手机、同类机型用户缩短、过分依赖开发商缺乏标准配置  

52. 什么样是ANR 咋样避免它?

答:ANR:Application Not Responding,五秒

在Android中,活动管理器和窗口管理器这五个体系服务承受监视应用程序的响应。当现身下列情形时,Android就会显示ANR对话框了:

  对输入事件(如按键、触摸屏事件)的响应超越5秒

  意向接受器(intentReceiver)抢先10分钟仍未执行完毕

Android应用程序完全运转在一个独自的线程中(例如main)。这就象征,任何在主线程中运行的,需要耗费大量时日的操作都会引发ANR。因为这时,你的应用程序已经没有机会去响应输入事件和企图广播(Intent
broadcast)。

  由此,任何运行在主线程中的方法,都要尽量的只做少量的办事。特别是运动生命周期中的首要艺术如onCreate()和

onResume()等更应这样。潜在的可比耗时的操作,如访问网络和数据库;或者是付出很大的计量,比如改变位图的轻重缓急,需要在一个单身的子线程中完成(或者是行使异步请求,如数据库操作)。但这并不意味你的主线程需要进入阻塞状态已等待子线程截止

也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将截止的时候调用它(xing:可以参照Snake的例子,那种办法与原先我们所接触的相形见绌)。使用这种艺术涉及你的应用程序,可以确保你的先后对输入保持优秀的响应,从而制止因为输入事件超过5分钟不被拍卖而暴发的ANR。这种实践需要利用到所有突显用户界面的线程,因为他俩都面临着同一的超时问题。 

53. 什么状况会促成Force Close ?如何避免?能否捕获导致其的非凡?

答:一般像空指针啊,可以看起logcat,然后对应到程序中来缓解错误 

54. Android自家的api并未阐明会抛出特别,则其在运转时有无可能抛出runtime卓殊,你遇见过吗?诺有的话会导致什么样问题?如何缓解?

答:比如空指针分外,通过try{}catch(){}捕获

55. 简练表明一下activity、 intent 、intent filter、service、布罗德case、布罗德(Broad)caseReceiver

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

  一个service不带有可见的用户界面,而是在后台无限地运行,可以连续不断到一个正值周转的劳务中,连接后,可以通过劳务中透露无遗出来的假说与其开展通信

  一个broadcast
receiver是一个收到播放信息并作出应对的component,broadcast
receiver没有界面

intent:content
provider在接收到ContentResolver的乞请时被激活。

activity, service和broadcast
receiver是被誉为intents的异步信息激活的。

一个intent是一个Intent对象,它保存了消息的始末。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI

Intent对象足以显式的指定一个目的component。若是这样的话,android会找到这么些component(基于manifest文件中的申明)并激活它。但假设一个对象不是显式指定的,android必须找到响应intent的极品component。

  它是经过将Intent对象和对象的intent
filter相比较来完成这一干活的。一个component的intent
filter告诉android该component能处理的intent。intent
filter也是在manifest文件中宣称的。 

56.  IntentService有何优点?

答:IntentService 的好处

*
Acitivity的过程,当处理Intent的时候,会暴发一个遥相呼应的瑟维斯(Service)(Service)

*
Android的历程处理器现在会尽可能的不kill掉你

* 很是容易使用 

57. 横竖屏切换时候activity的生命周期?

1、不设置Activity的android:configChanges时,切屏会重新调用各种生命周期,切横屏时会执行五遍,切竖屏时会执行五回

2、设置Activity的android:configChanges=”orientation”时,切屏依旧会重新调用各样生命周期,切横、竖屏时只会实施五次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各样生命周期,只会履行onConfigurationChanged方法 

58. 哪些将打开res/raw目录中的数据库文件?

答:在Android中无法一贯打开res/raw目录中的数据库文件,而需要在先后第四次启动时将该公文复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本办法是利用getResources().openRawResource方法拿到res/raw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其它的目录中相应文件中。在Android SDK中得以行使SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。 

59. Android引入广播机制的来意?

答:a:从MVC的角度考虑(应用程序内)

 其实回答这一个题目的时候还足以这么问,android为啥要有这4大组件,现在的移位支付模型基本上也是照搬的web那一套MVC架构,只可是是改了点嫁妆而已。android的四大组件本质上就是为了兑现移动仍然说嵌入式设备上的MVC架构,它们之间有时是一种相互依存的涉嫌,有时候又是一种补偿关系,引入广播机制得以方便几大组件的消息和数目交互。

b:程序间互通音信(例如在祥和的应用程序内监听系统来电)

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

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

60. Android dvm的经过和Linux的经过, 应用程序的经过是否为同一个定义

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的经过中运行,都享有一个单身的Dalvik虚拟机实例。而每一个DVM都是在Linux
中的一个过程,所以说可以认为是同一个概念。

61. sim卡的EF 文件有何意义

sim卡的文件系统有协调专业,首如若为着和手机通讯,sim本
身可以有投机的操作系统,EF就是作存储并和手机通讯用的

62. 嵌入式操作系统内存管理有哪三种,各有何特征

页式,段式,段页,用到了MMU,虚拟空间等技巧 

63. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数额发生时,可以承受并以丰盛快的进度予以拍卖,其拍卖的结果又能在确定的刻钟之内来决定生育过程或对拍卖系统作出急速响应,并操纵所有实时任务协调一致运行的嵌入式操作系统。紧要用于工业控制、
军事装备、
航空航天等领域对系统的响应时间有苛刻的渴求,这就需要运用实时系统。又可分为软实时和身心健康时二种,而android是基于linux内核的,由此属于软实时。

64. 一条最长的短音信约占多少byte?

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

65. android中的动画有哪几类,它们的特性和区别是怎么?

二种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现形式可以使视图组件移动、放大、减弱以及发生透明度的变通;另一种Frame动画,传统的卡通片方法,通过逐条的广播排列好的图形来贯彻,类似电影。

66. handler机制的规律

andriod提供了 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。 

67. 说说mvc格局的规律,它在android中的运用

MVC(Model_view_contraller)”模型_视图_控制器”。
MVC应用程序总是由那两个部分组成。伊芙nt(事件)导致Controller改变Model或View,或者同时改变两者。只要
Controller改变了Models的数额依旧性质,所有信赖的View都会自动更新。

68. DDMS和TraceView的区别?

DDMS是一个程序执行查看器,在其中可以瞥见线程和仓库等消息,TraceView是程序性能分析器

69. java中怎么着引用本地语言

能够用JNI(java native interface  java
本地接口)接口 。

70. 谈谈Android的IPC(进程间通信)机制

IPC是其中进程通信的简称,
是共享”命名管道”的资源。Android中的IPC机制是为着让Activity和Service(Service)之间可以每天的拓展交互,故在Android中该机制,只适用于Activity和瑟维斯(Service)之间的通信,类似于远程方法调用,类似于C/S形式的拜会。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

71. NDK是什么

NDK是有些列工具的集结,NDK提供了一文山会海的工具,协助开发者神速的付出C/C++的动态库,并能自动将so和java
应用打成apk包。

NDK集成了接力编译器,并提供了对应的mk文件和隔断cpu、平台等的歧异,开发职员只需简单的改动mk文件就足以创设出so

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

可以将dictionary.db文件复制到Eclipse
Android工程中的res/raw目录中。所有在res/raw目录中的文件不会被核减,这样可以一贯领取该目录中的文件。能够将dictionary.db文件复制到res/raw目录中 

自我是天皇盖地虎的分割线                                                             

发表评论

电子邮件地址不会被公开。 必填项已用*标注