Android 练习错题集

来源:互联网 发布:约翰 巴丁 知乎 编辑:程序博客网 时间:2024/04/30 19:20
1.GLSurfaceView提供了下列特性
                1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
                2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
                3> 用户自定义渲染器(render)。
                4> 让渲染器在独立的线程里运作,和UI线程分离。
                5> 支持按需渲染(on-demand)和连续渲染(continuous)。
                6> 一些可选工具,如调试。
2.在同一线程中android.Handler和android.MessaegQueue的数量对应关系是怎样的?
   1(Handler):N(MessageQueue)
3.下面关于Android中定义style和theme的正确描述有:
都可以减少重复属性设置
style可以作用在Activity上
一个TextView的style中定义了textColor属性,TextView本身也设置textColor属性,那么TextView本身定义的优先级较高
4.进程按重要性分类,第一类进程最重要,通常最后被销毁
1:前台(Foreground)进程,与用户当前正在做的事情密切相关。不同的应用程序组件能够通过不同的方法使它的宿主进程移到前台。当下面任何一个条件满足时,可以考虑将进程移到前台:
(1)进程正在运行一个与用户交互的Activity ,它的onResume()方法被调用
(2)进程有一个Service,该Service对应的Activity正在与用户交互
(3)进程有一个Service被调用startForeground()方法,要求到前台来执行
(4)进程有一个Service,并且在Service的某个回调函数(onCreate()、onStart()、 或onDestroy())内有正在执行的代码。
(5)进程有一正在运行的BroadcastReceiver,它的onReceive()方法正在执行
2:可见(visible)进程,它有一个可以被用户从屏幕上看到的Activity,但不在前台,它的onPause()方法被调用。这样的进程一般不允许被杀死,除非为了保证前台进程的运行不得不这样做。
3:服务(service)进程,有一个已经用startService() 方法启动的Service。虽然这些进程用户无法直接看到,但它们做的事情却是用户所关心的(例如后台MP3播放、后台数据上传下载等)。因此,系统将一直运行这些进程除非内存不足以维持所有的前台进程和可见进程。
4:后台(background)进程, 拥有一个当前用户看不到的Activity(它的onStop()方法被调用)。这些进程对用户体验没有直接的影响。如果它们正确执行了Activity生命期,系统可以在任意时刻杀死进程来回收内存,并提供给前面三种类型的进程使用。
5:空(empty)进程,不包含任何处于活动状态的应用程序组件。保留这种进程的唯一原因是,当下次应用程序的某个组件需要运行时,不需要重新创建进程,这样可以提高启动速度。
5.Intent可传递的数据类型
1. 8种基本数据类型及其数组   
2. String(String实现了   Serializable   )/CharSequence实例类型的数据及其数组   
3. 实现了Parcelable的对象及其数组  (自己来做, 操作较复杂, 但速度快) 
4. 实现了   Serializable   的对象及其数组(系统来做, 操作简单, 但速度慢)  
File在Java里也是类,在Android里也实现了Serializable接口
6.Android中MVC模式
M层:适合做一些业务逻辑处理,比如 数据库 存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。 
V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。 
C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器,Activity读取V视图层的数据
7.Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动 
消失。  Toast也可以完全自定义,还可以带图片。
8.Android使用 getWritableDatabase() 和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。(getReadableDatabase()方法中会调用getWritableDatabase()方法)

getReadableDatabase()并不是以只读方式打开数据库,而是先执行getWritableDatabase(),失败的情况下才以只读方式打开数据库.。

但getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,

getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,
倘若使用如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库.

9.在Android中使用IBinder进行IPC通讯时,能够传递下列哪些数据?Parcelable ,Serializable ,Bundle、

10.Android数据持久化有五种方式:

1、SharedPreferences
2、内部存储(例如通过openFileOutput()打开一个文件输入输出流)
3、SQLite Database
4、网络连接(将数据存储到服务器上)
5、外部存储(SD卡)
11.Uri的使用场景
1,调web浏览器  
Uri myBlogUri = Uri.parse(" http://xxxxx.com ");  
returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);  
2,地图  
Uri mapUri = Uri.parse("geo:38.899533,-77.036476");  
returnIt = new Intent(Intent.ACTION_VIEW, mapUri);  
3,调拨打电话界面  
Uri telUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_DIAL, telUri);  
4,直接拨打电话  
Uri callUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_CALL, callUri);  
5,卸载  
Uri uninstallUri = Uri.fromParts("package", "xxx", null);  
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);  
6,安装  
Uri installUri = Uri.fromParts("package", "xxx", null);  
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);  
7,播放  
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");  
returnIt = new Intent(Intent.ACTION_VIEW, playUri);  
8,调用发邮件  
Uri emailUri = Uri.parse("mailto:xxxx@gmail.com");  
returnIt = new Intent(Intent.ACTION_SENDTO, emailUri);  
9,发邮件  
returnIt = new Intent(Intent.ACTION_SEND);  
String[] tos = { "xxxx@gmail.com" };  
String[] ccs = { "xxxx@gmail.com" };  
returnIt.putExtra(Intent.EXTRA_EMAIL, tos);  
returnIt.putExtra(Intent.EXTRA_CC, ccs);  
returnIt.putExtra(Intent.EXTRA_TEXT, "body");  
returnIt.putExtra(Intent.EXTRA_SUBJECT, "subject");  
returnIt.setType("message/rfc882");  
Intent.createChooser(returnIt, "Choose Email Client");  
10,发短信  
Uri smsUri = Uri.parse("tel:100861");  
returnIt = new Intent(Intent.ACTION_VIEW, smsUri);  
returnIt.putExtra("sms_body", "yyyy");  
returnIt.setType("vnd.android-dir/mms-sms");  
11,直接发邮件  
Uri smsToUri = Uri.parse("smsto://100861");  
returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri);  
returnIt.putExtra("sms_body", "yyyy");  
12,发彩信  
Uri mmsUri = Uri.parse("content://media/external/images/media/23");  
returnIt = new Intent(Intent.ACTION_SEND);  
returnIt.putExtra("sms_body", "yyyy");  
returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri);  
returnIt.setType("image/png");
12.在创建AVD时,下面哪些是不能配置的选项
在创建的时候 我们肯定会设置分辨率 和 内存大小 所以BC正确 D项我们在创建的时候 也会设置其支持 除此之外 还有键盘支持 而没有蓝牙支持 
13.RemoteView在哪些功能中使用
到目前为止,发现RemoteView会用在两个地方: 一个是在AppWidget , 另外一个是在Notification.   
先从官方对他的定义来看:  
RemoteView--  
A class that describes a view hierarchy that can be displayed in another process. The hierarchy is inflated from a layout resource file, and this class provides some basic operations for modifying the content of the inflated hierarchy.  
RemoteView描述一个view,而这个view是在另外一个进程显示的。它inflate于layout资源文件。并且提供了可以修改过view内容的一些简单基础的操作。  
从这个定义我们就知道RemoteView是用来描述一个垮进程显示的view 从而你就会明白为什么AppWidget和Nofication需要用到它了。
14.IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。 IntentService是Service的子类, IntentService在运行时会启动新的线程来执行任务。
15.xml命名可以是小写字母、数字、下划线
16.Android中正确构造一个对话框AlertDialog.Builder builder = new AlertDialog.Builder(context); 
ProgressDialog dialog = new ProgressDialog(context);
17.在一个ListView中,显示的行布局有多种不同形式,例如某些行只有ImageView,而另外一些行只有TextView,需要重写哪几个方法?getCount()getItemId()getItemViewType()getViewTypeCount()
18.下列情况下系统会弹出Froce Close对话框:
应用运行时抛出了OutOfMemoryError
应用运行时抛出了RuntimeException
ANR与FC不一样。ANR是系统超时无响应(Android no response),而FC是一些error和exception造成的强制关闭(表现为强制退出,闪退)
19.关于 intent 的说法可以用来激活组件、表示程序想做某事的意图、是一个简单的消息对象。intent不但可以在同一个的不同组件之间传递数据,而且可以在不同app之间传递数据
20.andrroid 的动画类型
    1.帧动画  Frame  一帧一帧的    
    2.补间动画    Tween  慢慢过渡,设置初值和末值,并用插值器来控制过渡
    3.属性动画    ObjectAnimation ValueAnimation   控制属性来实现动画。
属性动画是3.0以后加入的动画。三种动画各有各的好处和缺点
    特点:
        1.帧动画 由于是一帧一帧的,所以需要图片多。会增大apk的大小,但是这种动画可以实现一些比较难的效果
比如说等待的环形进度。。多用这个做。所涉及到的Java对象有:AnimationDrawable。
        2.补间动画  可以设置差值器和初末值来控制。相对也比较简单,页面切换的动画多用这个来做。缺点,视觉上
上变化,并不是真正的位置上的变化。所涉及到的Java对象有:AlphaAnimation(渐变动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)、RotateAnimation(旋转动画)。
        3.属性动画  最为强大的动画,弥补了补间动画的缺点,实现位置+视觉的变化。并且可以自定义插值器,实现各种
想要的效果。典型案例-----》卫星菜单。所涉及到的Java对象有:ValueAnimator、ObjectAnimator。
Animation表示的是提供动画效果
21.DVM dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux  中的一个进程,所以说可以认为Android dvm的进程和Linux的进程是同一个概念。 
22.使用SimpleAdapter作为适配器时,支持三种类型的 View,而且是按照如下顺序进行匹配:
  1. 继承Checkable接口
  2.  TextView
  3.  ImageView
CompoundButton 声明如下:
1
publicabstract class CompoundButton extendsButton implementsCheckable
可见他是实现了Checkable接口的按钮,因此也在入选范围内。如果以上三种类型都不是,就会抛出IllegalStateExeception
 23.Android系统对下列哪些对象提供了资源池
Message提供了消息池,有静态方法Obtain从消息池中取对象;
Thread默认不提供资源池,除非使用线程池ThreadPool管理;
AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数 * 2 + 1)个线程,超过后会丢弃其他任务;
Looper,每个Looper创建时创建一个消息队列和线程对象,也不是资源池;
24.NDK是一系列工具的集合

       NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

       NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

        NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

      NDK提供了一份稳定、功能有限的API头文件声明

       Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)

25.Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。
 这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。 
我们都知道Android系统不会安装运行任何一款未经数字签名的apk程序,无论是在模拟器上还是在实际的物理设备上。所以我们会有一个疑问,为何在日常开发过程中我没有进行任何签名的操作,程序都会在模拟器和真机上运行?下面我们来讲讲
APK程序的两种模式: 调试模式(debug mode)和发布模式(release mode)
1. 调试模式(debug mode)  :  在调试模式下, ADT会自动的使用debug密钥为应用程序签名,因此我们可以直接运行程序。
debug密钥:    一个名为debug.keystore的文件
存放位置 :      C:\Users\Xiaopeng\.android\debug.keystore        Xiaopeng对应替换为自己操作系统的用户名
两个风险:
      debug签名的应用程序有这样两个风险:
      1)debug签名的应用程序不能在Android Market上架销售,它会强制你使用自己的签名;
      2)debug.keystore在不同的机器上所生成的可能都不一样,就意味着如果你换了机器进行apk版本升级,那么将会出现上面那种程序不能覆盖安装的问题。
          不要小视这个问题,如果你开发的程序只有你自己使用,当然无所谓,卸载再安装就可以了。但要是你的软件有很多使用客户,这就是大问题了,就相当于软件不具备升级功能! 所以一定要有自己的数字证书来签名;
2. 发布模式(release mode) :  当要发布程序时,开发者就需要使用自己的数字证书给apk包签名
使用自己的数字证书给APK签名的两种方法:

(1)通过DOS命令来对APK签名。

(2)使用ADT Export Wizard进行签名
26.AIDL:Android Interface Definition Language,即Android接口定义语言。AIDL是处理多线程、多客户端并发访问的。
Android 使用AIDL提供公开服务接口,使得不同进程间可以相互通信。

编写Aidl文件时,需要注意下面几点:

  1.接口名和aidl文件名相同。

  2.接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。

  3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。

  4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。

  5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。

  6.Java原始类型默认的标记为in,不能为其它标记。

27.

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。

默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。超出就会提示应用程序无响应(ANR:Application Not Responding)对话框。

三种常见类型

1: KeyDispatchTimeout(5 seconds) -- 主要类型

按键或触摸事件在特定时间内无响应

2  BroadcastTimeout(10 seconds)

BroadcastReceiver在特定时间内无法处理完成

3: ServiceTimeout(20 seconds) -- 小概率类型

Service在特定的时间内无法处理完成

28.

0 0