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

1. 下列哪些语句关于内存回收的证实是天经地义的? (b )

A、 程序员必须创造一个线程来释放内存

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

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

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、管理一个surface,这个surface就是如出一辙片突出之内存,能一直排版到android的视图view上。

B、管理一个EGL display,它能够让opengl把内容渲染到上述的surface上。

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

D、可以直接打内存还是DMA等硬件接口取得图像数据

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

       
GLSurfaceView提供了下列特征:

                1>
管理一个surface,这个surface就是同块突出之内存,能直接排版到android的视图view上。

                2> 管理一个EGL
display,它会给opengl把内容渲染到上述的surface上。

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

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

                5>
支持以需要渲染(on-demand)和连续渲染(continuous)。

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

16. 底在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(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生命周期的熏陶是无均等的。
1 通过startService
Service会经历 onCreate –> onStart
stopService的时直接onDestroy
比方是 调用者
直接退出而并未调用stopService的讲话,Service会一直在后台运行。
下次调用者再起还可stopService。
2 通过bindService
Service只会运作onCreate, 这个时 调用者和Service绑定在一齐
调用者退出了,Srevice就会调用onUnbind–>onDestroyed
所谓绑定以并就共存亡了。 

  1. Started
    Service中应用StartService()方法来开展艺术的调用,调用者和服务中从未沟通,即使调用者退出了,服务还以拓展【onCreate()- 
    >onStartCommand()->startService()->onDestroy()】,注意其中没有onStart(),主要是让onStartCommand()方法吃代表了,onStart方法不引进下了。

2.
BindService蒙受应用bindService()方法来绑定服务,调用者和绑定者绑在合,调用者一旦退出服务也不怕止了【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。

Android中之service类似于windows中之service,service一般从不用户操作界面,它运行为系统中无便于吃用户发现,可以下其支付使监控之类的程序。

一、步骤

第一步:继承Service类

public class SMSService extends Service {
}

第二步:在AndroidManifest.xml文件中的<application>节点里对劳动进行配置:

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

二、Context.startService()和Context.bindService

劳不可知和谐运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这半单法子都得启动Service,但是其的行使场所有所不同。

1.使startService()方法启用服务,调用者与劳务中间无关,即使调用者退出了,服务还是运行。使用bindService()方法启用服务,调用者与服务绑定以了一块儿,调用者一旦退出,服务吗就算停止。

2.施用Context.startService()方法启动服务,在劳务不受创造时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已于创造,多次调用startService()方法并无会见招致多次开立服务,但会招多次调用onStart()方法。采用startService()方法启动之劳动,只能调用Context.stopService()方法了劳动,服务结束时会见调用onDestroy()方法。

3.用Context.bindService()方法启动服务,在服务不让创造时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个上调用者和服务绑定以联名,调用者退出了,系统就是见面预先调用服务的onUnbind()方法,。接着调用onDestroy()方法。如果调用bindService()方法前服务既于绑定,多次调用bindService()方法并无见面造成多次创服务以及绑定(也就是说onCreate()和onBind()方法并无见面让反复调用)。如果调用者希望跟正在绑定的劳务解除绑定,可以调用unbindService()方法,调用该方法吗会见导致系统调用服务之onUnbind()–>onDestroy()方法。

老三、Service的生命周期

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

onCreate()
该办法以劳务为创造时调用,该措施就见面给调用一次等,无论调用多少次startService()或bindService()方法,服务吗单独叫创造同次于。
onDestroy()该法在服务让终止时调用。

2.
Context.startService()启动Service有关的生命周期方法onStart()
只生采取Context.startService()方法启动服务时才见面回调该措施。该措施在劳务开始运行时叫调用。多次调用startService()方法尽管不见面反复创建服务,但onStart()
方法会被一再调用。

3.
Context.bindService()启动Service有关的生命周期方法onBind()只来应用Context.bindService()方法启动服务经常才见面回调该方式。该方式以调用者与劳动绑定时吃调用,当调用者与服务业已绑定,多次调用Context.bindService()方法并无见面招该措施吃数调用。onUnbind()只发使用Context.bindService()方法启动服务经常才会回调该方法。该办法在调用者与服务解除绑定时为调用。

备注:

  1. 运startService()启动服务

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); //unbindService(conn);//解除绑定

46. 注册广播有几种植方式,这些艺术发出哪优缺点?请谈谈Android引入广播机制的来意。

Android广播机制(两种植注册方式)

以android下,要想纳广播信息,那么这个广播接收器就得我们友好来兑现了,我们得延续BroadcastReceiver,就得生一个广播接受器了。有个接受器还不够,我们还得更写BroadcastReceiver里面的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包中开创一个RemoteService.aidl文件,在其中我们于定义一个接口,含有方法get。ADT插件会于gen目录下自动生成一个RemoteService.java文件,该类中包含一个称呼吧RemoteService.stub的内部类,该内部类吃含有aidl文件接口的get方法。

证一:aidl文件的职务不稳定,可以无限制

接下来定义自己的MyService类,在MyService类中由定义一个之中类去继承RemoteService.stub这个里面类,实现get方法。在onBind方法中回到这个里面类的对象,系统会活动将这目标封装成IBinder对象,传递让他的调用者。

附带要以AndroidManifest.xml文件被布置MyService类,代码如下:

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

为什么而指定调用AIDL服务之ID,就是要告诉外界MyService这个类似能够让别的进程看,只要别的进程知道之ID,正是有矣是ID,B工程才会找到A工程实现通信。

证明:AIDL并不需要权限

B工程:

     
首先我们设用A工程中变化的RemoteService.java文件拷贝到B工程中,在bindService方法中绑定aidl服务

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

     
说明:如果我们单独将RemoteService.aidl文件在一个包里,那个以咱们将gen目录下的该包拷贝到B工程中。如果我们用RemoteService.aidl文件与咱们的其他类存放在一块儿,那么我们以B工程中就要建立相应的承保,以保证RmoteService.java文件的申请对,我们无克修改RemoteService.java文件

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

  766游戏网官网    
ServiceConnection的onServiceConnected(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、Broadcase、BroadcaseReceiver

答:一个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

*
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应用程序总是由这三单部分构成。Event(事件)导致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之间可天天的展开互动,故在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目录中 

本人是当今盖地虎的分割线                                                             

发表评论

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