这道题B项的解析你能举个例子说明吗

14225人阅读
android 面试(7)
Android面试题
1.&下列哪些语句关于内存回收的说明是正确的
&A、&程序员必须创建一个线程来释放内存
&&B、&内存回收程序负责释放无用内存&
&&C、&内存回收程序允许程序员直接释放内存&
&&D、&内存回收程序可以在指定的时间释放内存对象&
android内存回收机制
我想每个人第一次用Android的时候,不可避免的会去装&个任务管理器,然后对里面时刻都停留着一大堆的程序表&示触目惊心,然后会在桌面上建立一个快捷清空内存的按&钮,时不时啪的按一下,看着内存剩余数量从30多变成100&多然后很有快感...&其实吧,Android是Linux的内核,每一个程序都是一个独立&的JAVA虚拟机,就和油汤里的油花一样互不干扰,这样充分&保证了万一某个程序的JAVA虚拟机崩溃,系统依旧稳定正&常运行.&而Android和传统Linux不一样的地方又在于,传统Linux在&进程活动停止后就结束了,这就类似于我们用S60和WM一&样,关闭程序,内存释放.而Android会把这些进程保留在内&存里,干嘛呢?为了保证你再次激活这些进程时候启动的更&快,比如说我们挂在桌面的Widgets,&具体一点我们拿新浪微博举例吧.我刚看完,退出,突然我想&我发一条微博吧,&那么这个时候我可以直接在桌面Widgets上操作----设想一&下如果我退出的时候这个进程就终止了,那么我在桌面上&点击Widgets的时候会不会卡顿一下甚至没有响应?&----这就跟我们把Widgets挂在桌面的行为完全背离了,放&在桌面上就是为了能随时观察到程序运行的情况,&以及随时可以快速调用程序.所以Android并没有在进程活&动停止就释放对应的内存.那么也许你还是会有疑问,那么&内存够不够用呢?&
512的内存被我用的只剩56M是不是很恐怖?其实系统一&点也不卡的,蛋定蛋定&是的,我理解,因为大家这么多年Windows都用习惯&了,Windows内存不足的时候机器卡的会让你想砸掉机箱,&而且调用虚拟内存的时候硬盘喀喀喀想的让你肉疼.&你肯定也会怕你的手机明明512M内存结果就剩下30来M&把你卡到崩溃.事实上呢,Android会在系统需要更多内存&的时候,去释放掉那些占用内存的进程----这个活动是智能的.最早大家认为是有个排序,比如最近使&用过哪些程序(LRU机制,Last&Recently&Used),然&后结束最早的进程.不过并非如此,否则就变成我们上小学&时候那样,个子高的块头大的男生跟班长下去拔草扛新书,&女生们留在班里绣花吧...&这样很明显不公平而且没准会结束掉那些我们并不想结束&掉的进程----譬如说这会儿我想切回到刚才后台的网页继&续浏览结果悲怆的发现它被系统给我强制关闭了...
Android把进程分成了一些优先级,比如&前台进程(Foreground),比如我们正在看书,那么看书&的程序就是前台进程,这些进程是不会被系统优先结束的.&当我把它切到后台的时候,它就变成后台进程了.&还有可见进程(Visible),这个怎么说呢,譬如输入法程&序,你平时是看不见它的,但是在你打开输入界面的时候,它&会很快的弹出来,而不是让你等啊等啊等,看不到的原因是&透明度的机制,咱就不要钻牛角尖讨论为啥我看不见了...&还有桌面的Widgets,比如我们的桌面时钟,这个东西就是&可见的,如果它被系统终止了会有什么样的结果?这个&Widgets依然会显示在桌面上,但是时针不走了...&主要服务,比如说,电话的拨号功能,你也不想正急着打&电话呢结果人家给你卡半天吧,尤其像我这样联系人上&2000的,载入一遍真的很慢啊...所以这些主要服务平时也&不会被系统自动结束,除非你非要关它,关了也会自己重新&加载的.这也是你完全释放内存以后过一会就看着内存可&用值又慢慢降低的原因.
次要服务(secondary&server),诸如谷歌企业套&件,Gmail,联系人,看着这些程序出现在任务管理器里可能&你会非常的莫名其妙,丫的这都哪跟哪啊我没开啊...其实&它们和一些系统功能也是息息相关的,比如Gmail的邮件推&送,我们时常需要用到它们,所以系统也太会去终止它们.甚&至于HTC机器上著名的HTC&Sense,这个也是次要服务,但&是其实它承接着整个系统界面的运行,所以,如果你强行关&闭所有进程的时候,你的屏幕会变成一片白...然后慢慢等&HTC&Sense加载.
后台进程(hidden),就是我们通常意义上理解的启动后&被切换到后台的进程,比如如浏览器和阅读器.后台进程的&管理策略有多种,但是一般来讲,系统都会视内存情况,尽可&能多的保留后台程序,这样会影响到你启动别的程序的运&行速度----我想这个很好理解,因为内存确实不够了,而且你&还没让系统自动释放内存.但好处是,你再次切换到这些已&启动的程序时几乎是无缝的,速度绝对比你从0开始启动它&要快得多.所以,这种后台进程在内存极度不够的时候,肯定&会被系统选择性的干掉的.&内容供应节点(content&provider),没有程序实体,仅提&供内容供别的程序去用的,比如日历供应节点,邮件供应节&点等.在系统自动终止进程时,这类程序享有优先的被干掉&权...&空进程(empty),&没有任何东西在内运行的进程,有些程序在退出后,依然会&在进程中驻留一个空进程,这个进程里没有任何数据在运&行,作用往往是提高该程序下次的启动速度或者记录程序&的一些历史信息.这部分进程无疑是系统最先终止的.
说了这么多,其实还是要结合实际的程序来看一下的,比如&Android这个很有名的自动内存调配的软件,Auto&Memory&Manager,它的设置和帮助界面就如上面所说的,&它自动提供了多种默认配置,例如极速模式,这个模式下,会&帮助你在设定好的临界值区间上,结束空进程以及内容供&应节点等等低优先级保留权的进程,来给你腾出更多的内&存,加速新运行程序打开的速度,但是它也说明了这种模式&的弊端,就是一些可能你不想被关闭的进程会被过早的关&闭,比如说,闹钟----在G2&G3还很火爆的2009年,很多用户&在买完手机后给我抱怨,哎呀这个机器闹钟怎么老不响&啊...上班老迟到...其实这就是因为手动结束进程的时候结&果把闹钟也给干掉了.系统的时间是会一直走的,这属于主&要服务,而闹钟呢,只是主要服务的一个附属品,所以被结束&后,是不会自动被启动的,既然没有启动自然就不会响了.与&此类似的例子就是里程碑不充电的BUG,这是因为Moto的&机器里有个USB的进程,如果你把它结束后,理论上会重新&启动的但是也会不启动,后面这种情况出现的结果就是你&插充电器没反应,插数据线连电脑没反应...重启手机就好&了.&当然我知道大家的洁癖很多,有的人就是见不得内存值太&小...好吧如果你不想一些被系统认为不太重要而你又很需&要的进程被你自己亲手扼杀的话,那么我推荐你使用高级&任务管理器这个程序,你可以把一些进程自动隐藏起来,也&就是说当你挥起狼牙棒横扫一堆进程的时候,你设置好的&几个进程是不会受任何影响的,比如桌面Launcher,比如闹&钟,比如USB,等等等等.但话说回来,我是不建议大家去手动&管理Android的内存,也许你会不习惯----我也没啥好劝告&的,总之,不要把你的智能机想的那么笨就行了.&刚才全杀掉进程后,过了一会,我的DEFY又变成剩余60M内&存,还是没啥鸭梨啊...如果你感兴趣可以做个试验,内&存很少的时候,你打开一个大游戏,然后退出,你会发现...
2.&下面异常是属于的是()多选
&&&&&&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).&
四舍五入&四和五是指正的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、&&B、&&C、&&D、11.activity
& & & & &&(与)的优先级比||(或)高
5.&对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行
&&&A、、、&、
6.&Intent传递数据时,下列的数据类型哪些可以被传递()多选
&&&&&&&A、、、、
7.&android&中下列属于的作用的是
&&A、实现应用程序间的数据共享
&&B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
&&C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
&&D、处理一个应用程序整体性的工作
8.&下列属于解析文件的优点的是
&&&&&&A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能(dom解析优点)
&&&&&&B、不用事先调入整个文档,占用资源少(sax解析优点)
&&&&&&C、整个文档调入内存,浪费时间和空间(dom解析缺点)
&&&&&&D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会(sax解析缺点)
不需要像dom解析那样在内存中建立一个dom对象,占用内存,sax解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。不过sax一般是处理固定格式的xml。
9.&&下面的对自定的方式正确的是()
&style&name=&myStyle&&
&item&name=&android:layout_width&&fill_parent&/item&
&&/resources&
&item&name=&android:layout_width&&fill_parent&/item&(没有)
&&&&/style&
&item&name=&android:layout_width&&fill_parent&/item&(没有&/style&)
&&&/resources&
&style&name=&android:layout_width&&fill_parent&/style&(&/style&应为&/item&)
&&&/resources&
10.&&&在中使用时可能需要重写的方法有()。多选
public boolean onCreateOptionsMenu(Menu menu) {
& & menu.add(0, 1, 1, R.string.exit);
& & menu.add(0,2,2,R.string.about);
return super.onCreateOptionsMenu(menu);
& & //当客户点击菜单当中的某一个选项时,会调用该方法
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == 1){
return super.onOptionsItemSelected(item);
11.&&在中运行下列语句,其输出值()。
&SELECT&@@IDENTITY&&
&&&&&A、可能为
&&&&&B、可能为
&&&&&C、&不可能为
&&&&&D、肯定为
@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
12.&在中运行如下语句,假定表中有多行数据,执行查询之&后的结果是()。
&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&A
&A、表中列最小值大于等于
&B、表中列最小值大于等于
&C、表中列的数据全部为
&D、表中列最小值大于等于
13.&&在中使用这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是
14.&android&关于生命周期的和说法正确的是多选题
&&&&&A、当第一次启动的时候先后调用和方法
&&&&&B、当第一次启动的时候只会调用方法
&&&&&C、如果已经启动,将先后调用和方法
&D、如果已经启动,只会执行方法,不在执行方法
15.&下面是属于特性的是多选
&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.&下面在文件中注册方式正确的
&&&A、&NewBroad&&
&intent-filter&
&&&&&&&&&&&&&&&&&&&android:name=&android.provider.action.NewBroad&/&
&&&&&&&&&&&&&&&&&action&
&/intent-filter&
&/receiver&
&&&&&B、&NewBroad&&
&intent-filter&
&&&&&&&&&&&&&&&&&&&android:name=&android.provider.action.NewBroad&/&
&/intent-filter&
&/receiver&
&&&&&C、&NewBroad&&
&&&&&&&&&&&&&&&&&&android:name=&android.provider.action.NewBroad&/&
&&&&&&&&&&&&&&action&
&/receiver&
&&&&&&&&&&receiver&android:name=&NewBroad&&
&&action&&
&&&&&&&&&&&&&&&&&&&android:name=&android.provider.action.NewBroad&/&
&&&&&&&&&&&&&&&action&
&/receiver&
&/intent-filter&
17.&关于类说法正确的是
&&&&&&A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
&&&&&&&&&名是String类型,而值都是基本类型
&&&&&&B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
&&&&&&&&&名是任意类型,而值都是基本类型
&&&&&&C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的
&&&&&&&&&名,可以为空,而值都是String类型&&&&&&
&&&&&&D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中
&&&&&&&&&的名是String类型,而值也是String类型
18.&我们都知道是线程与通信的桥梁如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是
&&&&&&&A、onDestroy()&
&&&&&&&B、onClear()
&&&&&&&C、onFinish()&
&&&&&&&D、onStop()
19.&下面退出错误的方法是()
&&&&&&&A、
&&&&B、抛异常强制退出
&&&&&&&C、System.exit(0)&0是正常退出&
其他数字是表示不正常退出
&&&&&&&D、
20.&下面属于的动画分类的有多项
&&&&&&&A、、、、Animation&
Android动画模式
Animation主要有两种动画模式:
一种是tweened animation(渐变动画)&
AlphaAnimation
ScaleAnimation
一种是frame by frame(画面转换动画)&
TranslateAnimation
RotateAnimation
21.&下面关于Android&dvm的进程和的进程应用程序的进程说法正确的是
&&&&&&&&A、DVM指的虚拟机每一个应用程序都在它自己的进程中运行不一定拥有一个独立&的虚拟机实例而每一个都是在中的一个进程所以说可以认为是同一个概念
&&&&&&&&B、DVM指的虚拟机每一个应用程序都在它自己的进程中运行不一定拥有一个独立的虚拟机实例而每一个不一定都是在中的一个进程所以说不是一个概念
&&&&&&&&C、DVM指的虚拟机每一个应用程序都在它自己的进程中运行都拥有一个独立的Dalvik虚拟机实例而每一个不一定都是在中的一个进程所以说不是一个概念
&&&&&&&&D、DVM指的虚拟机每一个应用程序都在它自己的进程中运行都拥有一个独立的&Dalvik虚拟机实例而每一个都是在中的一个进程所以说可以认为是同一个概念
22.&&&Android项目工程下面的目录的作用是什么
A、放置应用到的图片资源。
B、主要放置多媒体等数据文件
C、放置字符串,颜色,数组等常量数据
D、放置一些与相应的布局文件,都是文件
23.&&关于目录说法正确的是
A、&这里的文件是原封不动的存储到设备上不会转换为二进制的格式
B、&这里的文件是原封不动的存储到设备上会转换为二进制的格式
C、&这里的文件最终以二进制的格式存储到指定的包中
D、&这里的文件最终不会以二进制的格式存储到指定的包中
24.&&下列对的理解正确的是
A、&NDK是一系列工具的集合
B、&NDK&提供了一份稳定、功能有限的&头文件声明。
C、&使&“”&的开发方式终于转正,成为官方支持的开发方式
D、&NDK&将是&平台支持&开发的开端
Windows平台下如何使用Android NDK
二.填空题
25.&&android中常用的四个布局是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)和TableLayout(表格布局)
26.&&android&的四大组件是activity,,和。
27.&&java.io包中的objectinputstream和objectoutputstream类主要用于对对象的读写。
28.&&android&中的实现方法是:和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,网络。
&1. 使用SharedPreferences存储数据;
& 2. 文件存储数据;
& 3. SQLite数据库存储数据;
& 4. 使用ContentProvider存储数据;
& 5. 网络存储数据;
31.&当启动一个并且新的执行完后需要返回到启动它的来执行&的回调函数是
startActivityForResult
startActivityForResult(Intent,requestCode)//启动一个activity包含参数请求码和具体的intent数据,其中请求码可以用来识别子活动。
32.&请使用命令行的方式创建一个名字为版本为卡是在盘的根目录下名字为,&并指定屏幕大小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.&&在中,请简述的调用过程。分
1)安装和下载,下载&
&&2)在项目中接口的设计
&&3)使用实现本地方法
&&4)JNI生成动态链接库文件
&&5)将动态链接库复制到工程,在工程中调用,运行工程即可
35.&简述应用程序结构是哪些(分)
Android应用程序结构是:
&&Linux&Kernel(Linux内核、系统运行库或者是核心库、
&&Framework(开发框架包、(核心应用程序
36.&请继承SQLiteOpenHelper实现:分
&&&1)创建一个版本为的“diaryOpenHelper.db”的数据库,
&&&2)同时创建一个&“diary”&表(包含一个主键并自增长,topic字符型
&&&&&&&长度,&字符型长度)
&&&&3)在数据库版本变化时请删除表,并重新创建出表。
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控件,请用书写线程以秒的的时间完成其进度显示工作。(分)
public&class&ProgressBarStu&extends&Activity&{
private&ProgressBar&progressBar&=&
protected&void&onCreate(Bundle&savedInstanceState)&{
super.onCreate(savedInstanceState);
setContentView(R.layout.progressbar);
//从这到下是关键
progressBar&=&(ProgressBar)findViewById(R.id.progressBar);
Thread&thread&=&new&Thread(new&Runnable()&{
public&void&run()&{
int&progressBarMax&=&progressBar.getMax();
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.&&&&请描述下的生命周期。
&&&&&&必调用的三个方法:,用表示
()父启动子,子退出,父调用顺序如下
AAA&--&&onFreeze()&--&&onPause()&--&&onStop()&--&&onRestart()&--&&onStart(),onResume()&…
()用户点击,调用顺序如下
AAA&--&&onFreeze()&--&&onPause()&--&&onStop()&--&Maybe&--&&onDestroy()&–&Maybe
()调用,&调用顺序如下
AAA&--&&onPause()&--&&onStop()&--&&onDestroy()
()在上显示,&调用顺序如下
()在父上显示透明的或非全屏的,调用顺序如下
AAA&--&&onFreeze()&--&&onPause()
()设备进入睡眠状态,调用顺序如下
AAA&--&&onFreeze()&--&&onPause()
39.&&&如果后台的由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
&&&&&&onSaveInstanceState()
&&&&&&当你的程序中某一个在运行时,主动或被动地运行另一个新的,这个时候会执行。完成以后又会来找,这个时候就有两种情况:一是被回收,二是没有被回收,被回收的就要重新调用方法,不同于直接启动的是这回里是带上了参数;而没被收回的就直接执行,跳过了。
40.&&&&如何将一个设置成窗口的样式。
&&&&&&在中定义的地方一句话或就变成半透明的
41.&如何退出?如何安全退出已调用多个的?
对于单一的应用来说,退出很简单,直接即可。
当然,也可以用和这样的方法。
但是,对于多的应用来说,在打开多个后,如果想在最后打开的直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个而已。
当然,网上也有人说可以。
就好像有人问,在应用里如何捕获键,有人就会说用比较即可,而事实上如果不修改,根本不可能做到这一点一样。
所以,最好还是自己亲自试一下。
那么,有没有办法直接退出整个应用呢?
在之前,可以使用的方法。
它可以直接结束整个应用。在使用时需要权限。
注意不要被它的名字迷惑。
可是,在,这个方法失效了。
在添加了一个新的方法,,需要权限&。
可惜的是,它和的一样,根本起不到应有的效果。
另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,。
它需要权限。
并且需要添加属性
同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。
因为需要在中添加。
而是用于在源码下编译程序用的。
从以上可以看出,在,没有办法直接结束一个应用,而只能用自己的办法间接办到。
现提供几个方法,供参考:
1、抛异常强制退出:
该方法通过抛异常,使程序。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出的窗口。
2、记录打开的:
每打开一个,就记录下来。在需要退出时,关闭每一个即可。
3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个收到广播后,关闭即可。
4、递归退出
在打开新的时使用,然后自己加标志,在中处理,递归关闭。
除了第一个,都是想办法把每一个都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个都设置了,在两个结束的间隙,可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。
为了编程方便,最好定义一个基类,处理这些共通问题。&
42.&请介绍下中常用的五种布局。
FrameLayout(框架布局),(线性布局),(绝对布局),(相对布局),(表格布局)
43.&请介绍下的数据存储方式。
二文件存储方式
三数据库方式
四内容提供器()方式
五网络存储方式
44.&&请介绍下是如何实现数据共享的。
创建一个属于你自己的或者将你的数据添加到一个已经存在的中,前提是有相同数据类型并且有写入的权限。
45.&如何启用,如何停用。
Android中的类似于中的,一般没有用户操作界面,它运行于系统中不容易被用户发觉,
可以使用它开发如监控之类的程序。
第一步:继承类
public&class&SMSService&extends&Service&{&}
第二步:在文件中的节点里对服务进行配置
&service&android:name=&.DemoService&&/&
服务不能自己运行,需要通过调用或方法启动服务。这两个方法都可
以启动,但是它们的使用场合有所不同。
1.使用方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
使用方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
2.采用方法启动服务,在服务未被创建时,系统会先调用服务的方法,
接着调用方法。如果调用方法前服务已经被创建,多次调用方法并
不会导致多次创建服务,但会导致多次调用方法。
采用方法启动的服务,只能调用方法结束服务,服务结束时会调用
onDestroy()方法。&
3.采用方法启动服务,在服务未被创建时,系统会先调用服务的方法,
接着调用方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的方法,
。接着调用方法。如果调用方法前服务已经被绑定,多次调用方法并不会
导致多次创建服务及绑定也就是说和方法并不会被多次调用。如果调用者希望与正在绑定的服务
解除绑定,可以调用方法,调用该方法也会导致系统调用服务的方法。
三。的生命周期
1.Service常用生命周期回调方法如下:
onCreate()&该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次或方法,
服务也只被创建一次。&该方法在服务被终止时调用。&
2.&Context.startService()启动有关的生命周期方法
onStart()&只有采用方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。
多次调用方法尽管不会多次创建服务,但方法会被多次调用。
3.&Context.bindService()启动有关的生命周期方法
onBind()只有采用方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,
当调用者与服务已经绑定,多次调用方法并不会导致该方法被多次调用。
onUnbind()只有采用方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。
1.&采用启动服务
&&&&&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广播机制(两种注册方法)&
在下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承,就可以有一个广播接受器了。有个接受器还不够,我们还得重写里面的方法,当来广播的时候我们要干什么,这就要我们自己来实现,不过我们可以搞一个信息防火墙。具体的代码:
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.i++)&&&
&&&&&&&&{&&&
&&&&&&&&&&&&sms[0]&=&SmsMessage.createFromPdu((byte[])object[i]);&&&
&&&&&&&&&&&&Toast.makeText(context,&&来自的消息是:
&&&&&&&&}&&&
&&&&&&&&//终止广播,在这里我们可以稍微处理,根据用户输入的号码可以实现短信防火墙。&&&
&&&&&&&&abortBroadcast();&&&
&&当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:
&&我们就可以把广播接收器注册到系统里面,可以让系统知道我们有个广播接收器。这里有两种,一种是代码动态注册:
//生成广播处理&&&
smsBroadCastReceiver&=&new&SmsBroadCastReceiver();&&&
//实例化过滤器并设置要过滤的广播&&&
IntentFilter&intentFilter&=&new&IntentFilter(&android.provider.Telephony.SMS_RECEIVED&);&
//注册广播&&&
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,&intentFilter);&&
一种是在中配置广播
&?xml&version=&1.0&&encoding=&utf-8&?&&&
&manifest&xmlns:android=&/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.&请解释下在单线程模型中、、、之间的关系。
Handler简介:
一个允许你发送和处理和对象,这些对象和一个线程的相关联。每一个线程实例和一个单独的线程以及该线程的相关联。当你创建一个新的时,它就和创建它的线程绑定在一起了。这里,线程我们也可以理解为线程的。从这一点上来看,把和对象传递给,而且在这些对象离开时,负责执行他们。
Handler有两个主要的用途:()确定在将来的某个时间点执行一个或者一些和对象。()在其他线程(不是绑定线程)中排入一些要执行的动作。
Scheduling&Message,即(),可以通过以下方法完成:
post(Runnable):Runnable在绑定的线程上执行,也就是说不创建新线程。
postAtTime(Runnable,long):
postDelayed(Runnable,long):
sendEmptyMessage(int):
sendMessage(Message):
sendMessageAtTime(Message,long):
sendMessageDelayed(Message,long):
post这个动作让你把对象排入受到这些消息的时候执行他们,当然以一定的排序。这个动作允许你把对象排成队列,这些对象包含一些信息,的会处理这些当然,必须由的子类来重写。这是编程人员需要作的事。
当或者到一个时,你可以有三种行为:当准备好就处理,定义一个延迟时间,定义一个精确的时间去处理。后两者允许你实现和基于时间的行为。
当你的应用创建一个新的进程时,主线程(也就是线程)自带一个,这个管理顶层的应用对象(像等)和主线程创建的窗体。你可以创建自己的线程,并通过一个和主线程进行通信。这和之前一样,通过和来完成,差别在于在哪一个线程中执行这么方法。在恰当的时候,给定的和将在的中被。
Message简介:
Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给对象提供额外的两个域和一个域,这可以让你在大多数情况下不用作分配的动作。
尽管的构造函数是的,但是获取实例的最好方法是调用或者方法,这些方法会从回收对象池中获取一个。
MessageQueue简介:
这是一个包含列表的底层类。负责分发这些。并不是直接加到一个中,而是通过关联到。
你可以通过从当前线程中获取。
Looper简介:
Looper类被用来执行一个线程中的循环。默认情况,没有一个消息循环关联到线程。在线程中调用创建一个,然后用来处理,直到循环终止。
大多数和的交互是通过。
下面是一个典型的带有的线程实现。
&&class&LooperThread&extends&Thread&{
&&&&&&public&Handler&mH
&&&&&&public&void&run()&{
&&&&&&&&&&Looper.prepare();
&&&&&&&&&&
&&&&&&&&&&mHandler&=&new&Handler()&{
&&&&&&&&&&&&&&public&void&handleMessage(Message&msg)&{
&&&&&&&&&&&&&&&&&&//&process&incoming&messages&here
&&&&&&&&&&&&&&}
&&&&&&&&&&};
&&&&&&&&&&
&&&&&&&&&&Looper.loop();
48.&&&&AIDL的全称是什么?如何工作?能处理哪些类型的数据?
AIDL的英文全称是
当进程要去调用进程中的时,并实现通信,我们通常都是通过来操作的
首先我们在包中创建一个文件,在里面我们自定义一个接口,含有方法。插件会在目录下自动生成一个文件,该类中含有一个名为的内部类,该内部类中含有文件接口的方法。
说明一:文件的位置不固定,可以任意
然后定义自己的类,在类中自定义一个内部类去继承这个内部类,实现方法。在方法中返回这个内部类的对象,系统会自动将这个对象封装成对象,传递给他的调用者。
其次需要在文件中配置类,代码如下:
&!--&注册服务&
&service&android:name=&.MyService&&&
&&&&intent-filter&&
&&&&!--&&指定调用服务的
&&&&&&&&action&android:name=&net.blogjava.mobile.aidlservice.RemoteService&&/&&
&&&&&/intent-filter&&
&/service&
为什么要指定调用服务的就是要告诉外界这个类能够被别的进程访问,只要别的进程知道这个,正是有了这个工程才能找到工程实现通信。
说明:并不需要权限
&&&&&&首先我们要将工程中生成的文件拷贝到工程中,在方法中绑定服务
&&&&&&绑定服务就是将的作为的参数。
&&&&&&说明:如果我们单独将文件放在一个包里,那个在我们将目录下的该包拷贝到工程中。如果我们将文件和我们的其他类存放在一起,那么我们在工程中就要建立相应的包,以保证文件的报名正确,我们不能修改文件
&&&&&&&&&&&bindService(new&Inten(&net.blogjava.mobile.aidlservice.RemoteService&),&serviceConnection,&Context.BIND_AUTO_CREATE);&
&&&&&&&ServiceConnection的方法中的参数就是工程中类中继承了类的内部类的对象。
49.&请解释下程序运行时权限与文件系统权限的区别。
运行时权限授权
文件系统&内核授权
50.&&系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
通过直接发送把参数带过去,或者通过里的里的属性
51.&你如何评价系统?优缺点。
答:平台手机&大优势:&
一、开放性&
在优势方面,平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
二、挣脱运营商的束缚&
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。从去年上市&,用户可以更加方便地连接网络,运营商的制约减少。随着、这些至移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,当你可以通过手机软件方便地进行即时聊天时,再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头推动的终端天生就有网络特色,将让用户离互联网更近。
三、丰富的硬件选择&
这一点还是与平台的开放性相关,由于的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,好比你从诺基亚&风格手机&一下改用苹果&,同时还可将中优秀的软件带到上使用、联系人等资料更是可以方便地转移,是不是非常方便呢?
四、不受任何限制的开发商&
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.&什么情况会导致如何避免能否捕获导致其的异常
  答:一般像空指针啊,可以看起logcat,然后对应到程序中&来解决错误&
54.&Android本身的并未声明会抛出异常,则其在运行时有无可能抛出异常,你遇到过吗诺有的话会导致什么问题如何解决
55.&简要解释一下、&、、、、
  答:一个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&的好处&
  *&Acitivity的进程,当处理Intent的时候,会产生一个对应的Service&
  *&Android的进程处理器现在会尽可能的不kill掉你&
  *&非常容易使用&
57.&横竖屏切换时候的生命周期
  1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次&
  2、设置Activity的android:configChanges=&orientation&时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次&
  3、设置Activity的android:configChanges=&orientation|keyboardHidden&时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法&
如何将数据库文件与文件一起发布
  解答:可以将dictionary.db文件复制到Eclipse&Android工程中的res&aw目录中。所有在res&aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res&aw目录中&
58.&如何将打开目录中的数据库文件
  解答:在Android中不能直接打开res&aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res&aw目录中资源的&InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android&SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。&
59.&Android引入广播机制的用意
  答:a:从MVC的角度考虑(应用程序内)&
 其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。&
  b:程序间互通消息(例如在自己的应用程序内监听系统来电)&
  c:效率上(参考UDP的广播协议在局域网的方便性)&
  d:设计模式上(反转控制的一种应用,类似监听者模式)
60.&Android&dvm的进程和的进程应用程序的进程是否为同一个概念&
  指的虚拟机。每一个应用程序都在它自己的进程中运行,都拥有一个独立的虚拟机实例。而每一个都是在中的一个进程,所以说可以认为是同一个概念。&
61.&sim卡的文件有何作用&
  卡的文件系统有自己规范,主要是为了和手机通讯,本&身可以有自己的操作系统,就是作存储并和手机通讯用的&
62.&嵌入式操作系统内存管理有哪几种,&各有何特性&
  页式,段式,段页,用到了虚拟空间等技术&
63.&&什么是嵌入式实时操作系统操作系统属于实时操作系统吗
  嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、&军事设备、&航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而是基于内核的,因此属于软实时。&
64.&一条最长的短信息约占多少
  中文包括标点,英文,个字节。&
65.&android中的动画有哪几类,它们的特点和区别是什么
  两种,一种是动画、还有一种是动画。动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化另一种动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。&
66.&handler机制的原理&
  提供了&和&来满足线程间的通信。先进先出原则。类用来管理特定线程内对象之间的消息交换。&
  一个线程可以产生一个对象,由它来管理此线程里的消息队列。&
  你可以构造对象来与沟通,以便新消息到里或者接收从取出所送来的消息。&
  消息队列用来存放线程放入的消息。&
  线程:通常就是,而启动程序时会替它建立一个。&
67.&说说模式的原理,它在中的运用&
 模型视图控制器。&应用程序总是由这三个部分组成。事件导致改变或,或者同时改变两者。只要&改变了的数据或者属性,所有依赖的都会自动更新。类似的,只要
68.&DDMS和的区别&
DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,是程序性能分析器&。
69.&java中如何引用本地语言&
可以用(本地接口)接口&。
70.&谈谈的(进程间通信)机制&
IPC是内部进程通信的简称,&是共享命名管道的资源。中的机制是为了让和之间可以随时的进行交互,故在中该机制,只适用于和之间的通信,类似于远程方法调用,类似于模式的访问。通过定义接口文件来定义接口。端实现接口,端调用接口本地代理。
71.&NDK是什么
NDK是一些列工具的集合,提供了一系列的工具,帮助开发者迅速的开发的动态库,并能自动将和应用打成包。
NDK集成了交叉编译器,并提供了相应的文件和隔离、平台等的差异,开发人员只需简单的修改文件就可以创建出
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1137691次
积分:8524
积分:8524
排名:第2325名
原创:83篇
转载:75篇
评论:117条
(2)(4)(2)(1)(1)(1)(1)(2)(3)(10)(4)(3)(2)(12)(13)(3)(1)(1)(1)(2)(3)(1)(2)(14)(30)(4)(22)(8)(5)

我要回帖

更多关于 剑网三科举答题器 的文章

 

随机推荐