android知识

来源:互联网 发布:java while的用法 编辑:程序博客网 时间:2024/05/21 02:52
2012-3-27:
1.android中常用的五个布局是:FrameLayout,AbsoluteLayout,relativeLayout,TableLayout和LinearLayout.
2.android四大组件:activity,broadcast,service,contentprovider.
3.java.io包中的ObjectInputStream和ObjectOutputStream类主要用于对对象(Object)的读写.
4.android中service的实现方法是:startservice和bindservice.
5.activity一般会重载7个方法用来维护其生命周期,
onCreate(),onStart(),onResume(),onPause(),onReStart(),onStop(),onDestory().


6.android的数据存储方式:sharedpreference,文件,网络,contentprovider.
7.当启动一个activity并且新的activity执行完后需要返回到启动它的activity来执行的回调函数是
startActivityResult();
8.内存回收程序员负责释放无用内存.


9.GLSurfaceView的特性:
a>管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上.
b>管理一个EGL display,它能让opengl把内容渲染到上述的surface上.
c>让渲染器在独立的线程里运作,和UI线程分离.


10.ContentValues,它和Hashtable比较类似,也是负责存储一些名值对,但是它存储的名值对当中的名
是String类型,而值都是基本类型.


11.DVM指dalivk的虚拟机,每一个android应用程序都在它自己的进程中运行,都拥有一个独立的Dalivk
虚拟机实例,而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
12.assets目录的作用是什么?
主要放置多媒体等数据文件


13.关于res/raw目录的说法正确的是?
这里的文件时原封不动的存储到设备上不会转换为二进制的格式.


14.android NDK?
NDK是一系列工具的集合,NDK提供了一份稳定,功能有限的API头文件声明.使"Java+C"的开发方式终于转正
,成为官方支持的开发方式.NDK将是android平台支持的C开发的开端.


15.在android中,请简述jni的调用过程.
1>安装和下载Cygwin,下载android DNK
2>在NDK项目中jni接口的设计
3>使用C/C++实现本地方法
4>JNI生成动态链接.so文件
5>将动态链接库复制到java工程,在java工程中调用,运行java工程即可.




16.android应用程序结构是:
linux kernel(linux 内核),Libraries(系统运行库或是C/C++核心库),
Application Framework(开发框架包),Application(核心应用程序)


activity的生命周期:
1.父activity启动调用顺序如下:
onCreate()-->onStart()-->onResume()  记做:AAA
2.父activity启动子activity,弹出的对话框,父activity调用顺序如下:
onCreate()-->onStart()-->onResume()-->onPause()
然后点击返回键,
-->onResume()
然后再次点击返回键,返回到home:
-->onPause()-->onStop()-->onDestory()
3.父activity启动第二个activity,完全覆盖第一个activity:
onCreate()-->onStart()-->onResume()-->onPause()-->onStop()
然后,点击返回键,返回到第一个activity:
-->onRestart()-->onStart()-->onResume();
然后再次点击返回键,返回到home:
-->onPause()-->onStop()-->onDestory()
4.调用finish()
onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestory()


17.如果后台的activity由于某种原因被系统回收了,如何在被系统回收之前保存当前状态?
onSaveInstanceState()
当你的程序中某个activity在运行时,主动或者是被动去运行另一个新的activityB,
这个时候A会执行onSaveInstanceState().B完成后又回来找A,这个时候就有两种情况:
1>A已经被回收了:被回收的A就要重新调用onCreate(),与直接启动的是这回onCreate里
是带上了参数saveInstanceState;
2>A没有被回收:而没有被回收就执行onResume(),跳过了onCreate()


18.如何将一个activity设置成窗口的样式.
在AndroidManifest.xml中定义Activity的地方一句话:
android:theme="@android:style/Theme.Dailog"或
android:theme="@android:style/Theme.Translucent"就变成了透明的




19.如何退出activity?如何安全退出已经调用了多个activity的application?
finish(),killProgress(),System.exit()


2.1之前,可以使用activityManager的restartPackage方法.
它可以直接结束整个应用,在使用时需要权限android.permission.RESTART_PACKAGES;


2.2这个方法失效了,2.2添加了一个新的方法,killBackgroundProgress(),需要权限
android.permission.KILL_BACKGROUND_PROCESS.


另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStopPackage()
他需要权限android.permission.FORCE_STOP_PACKAGES.
并且需要添加android:sharedUserId="android.uid.system"属性
同样可惜的是,这个方法是非公开的,他只能运行在系统进程中,第三方程序无法调用.
因为需要子啊android.mk中添加LOCAL_CERTIFICATE:=platform.
而android.mk是用于在android源码下编译程序使用的.


a>抛异常强制退出
b>记录打开的activity
每打开一个activity就记录下来,在需要退出时,关闭每一个activity即可.
c>发送特定广播
在需要结束的时候,向每一个activity发送广播,每一个activity接收到了就关闭.
d>递归退出
在打开新的activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭/


以上都只是间接达到了目的,所以并不完美.
其实你会发发现,如果自己的应用程序对每一个activity都设置了nosensor,在两个activity结束的间隙,
sensor可能有效了.


但是,至少我们实现了,而且没有影响到用户的使用.

所以,为了编程方便,最好定义一个activity基类,处理这些共通问题.


谈谈android大中国常用的五种布局:
线性布局:LinearLayout 是应用程序中最常见的一种布局,主要提供控件水平或者垂直排列的模型.
每个子组件都是以垂直或水平的方式来定位(默认是垂直)
帧布局:FrameLayout 放入其中的所有元素都被放在最左的区域,而且无法为这些元素指定一个确切的位置,
下一个元素会重叠覆盖上一个子元素,适合浏览单张图片.
相对布局:RelativeLayout 给我那句另外一个组件或是顶层父组件来确定下一个组件的位置.
绝对布局:AbsoluteLayout采用坐标轴的方式定位组件.左上角是(0,0)点,往右x递增,往下y递增.
表格布局:TableLayout ,类似于html中的table,使用TableRow来布局,TableRow代表一行,
TableRow中的每一个视图组件代表一个单元格.




谈谈android的数据存储方式:
以文件的方式:  文件存储是一种较常用的方法,在android中读取/写入文件的方法,与java中实现I/O的
程序是一样的,提供openFileInput()和openFileOutput()方法来读取设备上的文件.
sqlite数据库:   sqlite是android所带的一个标准的数据库,他支持sql语句,它是一个轻量级的数据库
网络: 通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中
的数据信息.
sharedPreferences:它是android提供的用来存储一些简单配置信息的一种机制,采用了xml格式将数据存储
到设备中.只能够在同一个包内使用,不能再不同的包之间使用.
ContentProvider:主要应用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此ContentProvider的各种数据类型.


使用ContentProvider的好处:统一了数据访问方式.