已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android面试题大总结1. View的刷新: 在需要刷新的地方,使用handle (han de) .sendmessage (僧的嘛首去) 发送信息,然后在handle的getmessage里面执行inaliate(in耐需特)或者postinvaliate(破四特 in 耐需特).2. GC内存泄露出现的情况可能有哪几种?1).数据库的cursor(口所)没有关闭 2).构造adapter (额打不特)时,没有使用缓存contentview (坑拆次 U) 衍生listview的优化问题-减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/ 3).Bitmap(B买谱)对象不使用时采用recycle() V赛可释放内存 4).activity中的对象的生命周期大于activity 调试方法: DDMS= HEAPSZIE=data object=Total Size3.对activity的理解之一(简答:Activity是用户操作程序的接口。实际上就是一个控件的容器,我们要把控件摆放在这个Activity中,来完成一个完整的功能。通常一个activity对应一个布局文件Activity其实是Context的子类)在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate(可唉次) - onStart (思到特)- onResume, 在Activity被干掉的时候顺序是onPause - onStop - onDestroy ,这样就是一个完整的生命周期.但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause-onStop ,恢复的时候onStart-onResume ,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候onResume 。onCreate:在这里创建界面 ,做一些数据 的初始化工作;onStart:到这一步变成用户可见不可交互的;onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity);onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动;onstop:变得不可见 ,被下一个activity覆盖了;onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方 法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里 把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android的消息机制 Handler,Message来处理多线程和界面交互的问题。4DDMS与TraceView的区别?DDMS是一个程序执行查看器,在里面你可以看见线程和堆栈等信息,TraceView是序性能分析器.5. activity被回收了怎么办? 答案:只有另起了!6. 在Java中如何引入C语言或者本地语言?可以用JNI接口。在JAVA中如果要调用C语言,需要将接口写成动态链接库的形式,然后在JAVA中调用.具体过程如下:首先在JAVA程序中写上要引用的动态链接库,如:static System.loadLibrary(test); /动态链接库为test.dll在程序中要声明本地方法,如:public native void display(String name);然后对此JAVA程序编译,如:javac HelloWorld.java成功后再用如下命令生成对C语言的.h文件:javah -jni -o test.h HelloWorld打开生成的test.h文件,对对应写好test.c文件.用如下命令生成动态链接库(test.dll):cl -I C:j2sdk1.4.2include -I C:j2sdk1.4.2includewin32 -LD test.c/其中C:j2sdk1.4.2include为jdk的安装目录这样就可以完成了.在原来的JAVA程序中可以方便地调用C接口.但在此过程中可能会遇到一些系统库文件无法找到的错误,只需要根据错误提示找到相应的文件考到相应的文件夹下就行了.7. 通过Intent传递一些二进制数据的方法有哪些? 1). 使用Serializable接口实现序列化,这是Java常用的方法。 ( Bundle.putSerializable(key,Object) );2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的.( Bundle.putParcelable(key,Object) ).8.说说Hash Set和Hash Table的区别?HashSet相对于HashMap就是不能存放重复的数据,对于HashTable来说,存放的数据不能出现key或value为null这样的情况。9. 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。10. 如何退出打开的多个Activity?(简答:对于单一Activity的应用来说,退出很简单,直接finish()即可。 当然,也可以用killProcess()和System.exit()这样的方法多个:1、抛异常强制退出 2)、记录打开的Activity 3)、发送特定广播 4)、递归退出 )1、抛异常强制退出:该方法通过抛异常,使程序Force Close。验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。2)、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。3)、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。4)、递归退出在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。但是这样做同样不完美。你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。但至少,我们的目的达到了,而且没有影响用户使用。基于前面所做项目,对这个的处理:把每一个打开的activity存放到栈里面,最后关闭程序的时候直接调用remove()方法。11. 请介绍下ContentProvider是如何实现数据共享的。ContentProvider负责:组织应用程序的数据;向其他应用程序提供数据;ContentResolver则负责:获取ContentProvider提供的数据;修改/添加/删除更新数据等;ContentProvider向外界提供数据操作的接口:query(Uri, String, String, String, String)insert(Uri, ContentValues)update(Uri, ContentValues, String, String)delete(Uri, String, String)12. 如何启用Service,如何停用Service。两种方式的区别是?1) 第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service; 2) 第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service。在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。一步骤第一步:继承Service类public class SMSService extends Service 第二步:在AndroidManifest.xml文件中的节点里对服务进行配置:二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()方法。13. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。 简单的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理。14. AIDL的全称是什么?如何工作?能处理哪些类型的数据?AIDL的英文全称是Android Interface Define Language当A进程要去调用B进程中的service时,并实现通信,我们通常都是通过AIDL来操作的A工程:首先我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自定义一个接口,含有方法get。ADT插件会在gen目录下自动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get方法。说明一:aidl文件的位置不固定,可以任意然后定义自己的MyService类,在MyService类中自定义一个内部类去继承RemoteService.stub这个内部类,实现get方法。在onBind方法中返回这个内部类的对象,系统会自动将这个对象封装成IBinder对象,传递给他的调用者。其次需要在AndroidManifest.xml文件中配置MyService类,代码如下: 为什么要指定调用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); ServiceConnection的onServiceConnected(ComponentName name, IBinder service)方法中的service参数就是A工程中MyService类中继承了RemoteService.stub类的内部类的对象。15. 什么是ANR 如何避免它?ANR:Application Not Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:1) 对输入事件(如按键、触摸屏事件)的响应超过5秒;2) 意向接受器(intentReceiver)超过10秒钟仍未执行完毕Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成 (或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。16. 简要解释一下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能处理的ent filter也是在manifest文件中声明的。17. 横竖屏切换时候activity的生命周期?总结:1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:configChanges=orientation时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:configChanges=orientation|keyboardHidden时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法总结一下整个Activity的生命周期补充一点,当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState -onPause - onStop onRestart -onStart-onResumeActivity未被完全覆盖只是失去焦点:onPause-onResume 18. 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res aw目录中19. 如何将打开res aw目录中的数据库文件?在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。20. Android引入广播机制的用意?a:从MVC的角度考虑(应用程序内) 其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互;b:程序间互通消息(例如在自己的应用程序内监听系统来电);c:效率上(参考UDP的广播协议在局域网的方便性);d:设计模式上(反转控制的一种应用,类似监听者模式)。21. android的优势与不足?(具体的请参见网络详细解释)Android平台手机 5大优势:一、开放性;二、挣脱运营商的束缚;三、丰富的硬件选择;四、不受任何限制的开发商;五、无缝结合的Google应用;再说Android的5大不足:一、安全和隐私;二、首先开卖Android手机的不是最大运营商;三、运营商仍然能够影响到Android手机;四、同类机型用户减少;五、过分依赖开发商缺少标准配置。22. 谈谈Android的IPC机制IPC是内部进程通信的简称,是共享”命名管道”的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。23. NDK是什么?NDK是一些列工具的集合,NDK提供了一系列的工具,帮助开发者迅速的开发C/C+的动态库,并能自动将so和java 应用打成apk包。NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu、平台等的差异,开发人员只需简单的修改mk文件就可以创建出so文件.24. 如何将一个Activity设置成窗口的样式?在AndroidManifest.xml 中定义Activity的地方一句话android:theme=android:style/Theme.Dialog或android:theme=android:style/Theme.Translucent就变成半透明的。25. 请介绍下Android中常用的五种布局。FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。26. 请介绍下Android的数据存储方式。一.SharedPreferences方式二.文件存储方式三.SQLite数据库方式四.内容提供器(Content provider)方式五. 网络存储方式27. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念?DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。28. sim卡的EF文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的。29. 嵌入式操作系统内存管理有哪几种?页式,段式,段页,用到了MMU,虚拟空间等技术30. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。31. 一条最长的短信息约占多少byte?中文70(包括标点),英文160,160个字节。32. android中的动画有哪几类,它们的特点和区别是什么?android中动画有几种。其特点与区别。Animation的子类及其特点。Animation 类及其子类Animation 类及其子类是动画的核心模块,它实现了各种动画效果,如平移、缩放、旋转、改变透明度等。Tween 动画的每一桢都根据 Interpolator 对 view 的内容做一次图形变换,因此 Animation 的核心工作是做变换(transformation)。Aniamtion 是基类,他记录了动画的通用属性和方法。主要的属性包括动画持续时间、重复次数、interpolator 等。动画里最重要的方法是 getTransformation (currentTime, outTransformation),该方法根据当前间 (currentTime) 和 interpolator,计算当前的变换,在 outTransformation 中返回。TranslateAnimation、RotateAnimation、AlphaAnimation 等是 Animation 的子类,分别实现了平移、旋转、改变 Alpha 值等动画。每个动画都重载了父类的 applyTransformation 方法,这个方法会被父类的 getTransformation 方法调用。另外每个动画还有个 initialize 方法,完成初始化工作。不同的动画具有不同的属性,如 RotateAnimation 的属性是起始角度、终止角度和旋转点坐标, TranslateAnimation 的属性是起始位置和终止位置。AlphaAnimation 的属性是起始 alpha 值和终止 alpha 值。33说说mvc模式的原理,它在android中的运用?(另:网络获取精确答案)MVC(Model_view_contraller)”模型_视图_控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要 Controller改变了 View,View会 从潜在的 Model 中获取数据来刷新自己。34. 什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?一般像空指针啊,可以看起logcat,然后对应到程序中来解决错误。35. IntentService有何优点?IntentService 的好处:* Acitivity的进程,当处理Intent的时候,会产生一个对应的Service* Android的进程处理器现在会尽可能的不kill掉你* 非常容易使用36. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放.遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解()A开启B的时候,用startActivityForResult()方法, B返回的时候把播放的状态信息返回给A ,A继续播放音乐.37. android的哪个版本是一次重大的升级?1.638. res目录有默认几项resource?39. android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别?XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。40. 简单描述下Android 数字签名。在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。(3)可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共享概功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的protectionLevel是signature,则这个权限就只能授予那些跟该权限所在的包拥有同一个数字证书的程序。在签名时,需要考虑数字证书的有效期:(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。Android数字证书包含以下几个要点: (1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序 (2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证 (3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。 (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。41. Linux中跨进程通信的几种方式?# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。42. 如何判断是否有SD卡?Android中判断SD卡是否存在,并且可以进行写操作,可以使用如下代码if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)43. 在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?44. 不同工程中的方法是否可以相互调用?可以,列举aidl访问远程服务的例子45. 在Android中,怎么节省内存的使用,怎么主动回收内存?核心:什么占内存资源池:同类临时对象创建多次对象在不需要使用的时候不创建Activity或者Service中的onDestroy方法中主动释放.回收已经使用的资源,合理的使用缓存合理设置变量的作用范围 application对象/未来的某一段时间执行System.gc();46. Android中Task任务栈的分配是如何分配的?47. Android程序与Java程序的区别?不是虚拟机方面的!Android程序用android sdk开发,java程序用javasdk开发.Android SDK引用了大部分的Java SDK,少数部分被AndroidSDK抛弃,比如说界面部分,java.awt swing package除了java.awt.font被引用外,其他都被抛弃,在Android平台开发中不能使用。android sdk添加工具jar httpclient ,pull openGL将Java游戏或者j2me程序移植到Android平台的过程中,AndroidSDK与Java SDK的区别是很需要注意的地方。1.6的不支持 httpUrlconning获取 last-modified信息的处理.48. 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?区别是根据activity在manifest里面的配置,这个activity可能会放在不同的task栈里面.intent设置的flag flag_new_task49. 启动应用后,改变系统语言,应用的语言会改变么? 会50. ListView如何提高其效率?1.如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。2.ListView先请求一个type1视图(getView)然后请求其他可见的项目。convertView在getView中是空(null)的。3.当item1滚出屏幕,并且一个新的项目从屏幕低端上来时,ListView再请求一个type1视图。convertView此时不是空值了,它的值是item1。你只需设定新的数据然后返回convertView,不必重新创建一个视图。复用convertview,历史的view对象异步加载数据,分页加载数据,onscallLinster();Static class ViewHolder使用静态的view对象避免创建过多的view.把下载后的数据缓存到数据库里51. Framework工作方式及原理?Activity是如何生成一个view的?机制是什么?反射 ,配置文件可以讲下activity的源码,比如说每个activity里面都有window.callback和keyevent.callback,一些回调的接口或者函数吧.框架把activity创建出来就会调用里面的这些回调方法,会调用activity生命周期相关的方法.setContentView();普通的情况:Activity创建一个view是通过 ondraw画出来的,画这个view之前呢,还会调用onmeasure方法来计算显示的大小.Surfaceview直接操作硬件 opengl .图像要想被显示到界面上,需要设备显卡,显存.写到显存.52. 如何加载的音乐信息?如何改善其效率?Android提供mediascanner,mediaStore等接口,音乐文件的信息都会存放到系统的数据库表中,可以通过content provider获取,显示出来,改善效率,是个常见问题,可以从以下几个方面作答,分批加载数据,延时加载数据,合理使用缓存等.Java虚拟机,目标,加快java程序执行速度预先加载一些都会的使用的大的class的字节码,提前加载.53.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性。54. 谈谈UI中, Padding和Margin有什么区别?Padding是文字相对于边框,而Margin是边框相对于父窗体。55. 为什么要用ContentProvider?它和sql的实现上有什么差别?使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri56. Android为什么要设计4大组件,他们之间的联系,不设计行不行?主要是为了实现MVC模式.57. 常见的适配器及特点?在 android 中常见的适配器类有: BaseAdapter 、 SimpleAdapter、ListAdapterBaseAdapter 是一个抽象类,实现了了 ListAdapter 和 SpinnerAdapter 两个接口,这两个接口都继承自 Adapter 接口。在这个接口中申明了我们需要实现的四个重要的方法。 接下来,我们进入 ListView 中查看 setAdapter 方法, ListView 就是通过调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年白银市平川区中小学教师招聘笔试模拟试题及答案详解
- 2026年昆明市盘龙区法检系统书记员招聘考试参考试题及答案详解
- 2026年山西省大同市街道办人员招聘考试备考试题及答案详解
- 2026年黄山市徽州区中小学教师招聘笔试备考试题及答案详解
- 2026年黄冈市黄州区法检系统书记员招聘考试参考题库及答案详解
- 2026年台州市路桥区中小学教师招聘考试模拟试题及答案详解
- 河南省周口市淮阳县2027届数学四上期末学业质量监测模拟试题含解析
- 2026年广西壮族自治区百色市街道办人员招聘考试备考题库及答案详解
- 2026年黑龙江省七台河市街道办人员招聘考试模拟试题及答案详解
- 2026年邵阳市双清区街道办人员招聘考试参考题库及答案详解
- (2026)继续教育公需课必修课考试题与参考答案(完整版)
- 2026年医师定期考核中医试题(附答案)
- 110kV变电站土建监理实施细则培训
- 《精装修施工工艺标准图册》
- 食品生产企业配料作业SOP指导书
- 霍尼韦尔Forge平台战略竞争力分析市场调研报告
- 中小学内控培训
- 卫生监督协管上墙制度
- 2026年幼儿园教师招聘面试题库含答案
- 建筑修缮考试题库及答案
- 2025年山西二级造价师土建工程真题及答案解析
评论
0/150
提交评论