Android面试题1Word格式文档下载.docx

上传人:wj 文档编号:1449522 上传时间:2023-04-30 格式:DOCX 页数:26 大小:88.86KB
下载 相关 举报
Android面试题1Word格式文档下载.docx_第1页
第1页 / 共26页
Android面试题1Word格式文档下载.docx_第2页
第2页 / 共26页
Android面试题1Word格式文档下载.docx_第3页
第3页 / 共26页
Android面试题1Word格式文档下载.docx_第4页
第4页 / 共26页
Android面试题1Word格式文档下载.docx_第5页
第5页 / 共26页
Android面试题1Word格式文档下载.docx_第6页
第6页 / 共26页
Android面试题1Word格式文档下载.docx_第7页
第7页 / 共26页
Android面试题1Word格式文档下载.docx_第8页
第8页 / 共26页
Android面试题1Word格式文档下载.docx_第9页
第9页 / 共26页
Android面试题1Word格式文档下载.docx_第10页
第10页 / 共26页
Android面试题1Word格式文档下载.docx_第11页
第11页 / 共26页
Android面试题1Word格式文档下载.docx_第12页
第12页 / 共26页
Android面试题1Word格式文档下载.docx_第13页
第13页 / 共26页
Android面试题1Word格式文档下载.docx_第14页
第14页 / 共26页
Android面试题1Word格式文档下载.docx_第15页
第15页 / 共26页
Android面试题1Word格式文档下载.docx_第16页
第16页 / 共26页
Android面试题1Word格式文档下载.docx_第17页
第17页 / 共26页
Android面试题1Word格式文档下载.docx_第18页
第18页 / 共26页
Android面试题1Word格式文档下载.docx_第19页
第19页 / 共26页
Android面试题1Word格式文档下载.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android面试题1Word格式文档下载.docx

《Android面试题1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Android面试题1Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。

Android面试题1Word格式文档下载.docx

这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。

2.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

当你的程序中某一个ActivityA在运行时中,主动或被动地运行另一个新的ActivityB 

这个时候A会执行

Java代码

1.public 

2.void 

onSaveInstanceState(Bundle 

outState) 

3. 

super.onSaveInstanceState(outState);

4. 

outState.putLong("

id"

 

1234567890);

5.} 

6. 

7.public 

void 

8. 

B完成以后又会来找A,这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回

收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数

savedInstanceState,没被收回的就还是onResume就好了。

savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。

在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。

if(savedInstanceState!

=null){ 

longid=savedInstanceState.getLong("

);

}

就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。

这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置...

3.如何将一个Activity设置成窗口的样式

简单你只需要设置一下Activity的主题就可以了在AndroidManifest.xml中定义Activity的

地方一句话:

Xml代码

1.android 

:

theme="

@android:

style/Theme.Dialog"

2. 

3.android:

这就使你的应用程序变成对话框的形式弹出来了,或者

1.android:

style/Theme.Translucent"

就变成半透明的,[友情提示-.-]类似的这种activity的属性可以在android.R.styleable类的AndroidManifestActivity方法中看到,AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类android.R.styleable

上面说的是属性名称,具体有什么值是在android.R.style中可以看到,比如这个"

就对应于android.R.style.Theme_Dialog,('

_'

换成'

.'

<

--注意:

这个是文章内容不是笑脸)就可以用在描述文件中了,找找类定义和描述文件中的对应关系就都明白了。

4.如何退出Activity

对于单一Activity的应用来说,退出很简单,直接finish()即可。

当然,也可以用killProcess()和System.exit()这样的方法。

现提供几个方法,供参考:

1、抛异常强制退出:

该方法通过抛异常,使程序ForceClose。

验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。

2、记录打开的Activity:

每打开一个Activity,就记录下来。

在需要退出时,关闭每一个Activity即可。

3、发送特定广播:

在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

4、递归退出

在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。

但是这样做同样不完美。

你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。

但至少,我们的目的达到了,而且没有影响用户使用。

为了编程方便,最好定义一个Activity基类,处理这些共通问题。

5.请介绍下Android中常用的五种布局 

Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:

FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

一、FrameLayout

这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。

这个布局比较简单,也只能放一点比较简单的东西。

二、LinearLayout

线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。

每一个LinearLayout里面又可分为垂直布局(android:

orientation="

vertical"

)和水平布局(android:

horizontal"

)。

当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;

水平布局时,只有一行,每一个元素依次向右排列。

linearLayout中有一个重要的属性android:

layout_weight="

1"

,这个weight在垂直布局时,代表行距;

水平的时候代表列宽;

weight值越大就越大。

三、AbsoluteLayout

绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:

layout_x="

20px"

android:

layout_y="

12px"

这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。

四、RelativeLayout

相对布局可以理解为某一个元素为参照物,来定位的布局方式。

主要属性有:

相对于某一个元素

android:

layout_below="

@id/aaa"

该元素在id为aaa的下面

layout_toLeftOf="

@id/bbb"

改元素的左边是bbb

相对于父元素的地方

layout_alignParentLeft="

true"

在父元素左对齐

layout_alignParentRight="

在父元素右对齐

还可以指定边距等,具体详见API

五。

TableLayout

表格布局类似Html里面的Table。

每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式android:

gravity="

"

每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。

6.请介绍下Android的数据存储方式 

Android提供了5种方式存储数据:

--使用SharedPreferences存储数据;

--文件存储数据;

--SQLite数据库存储数据;

--使用ContentProvider存储数据;

--网络存储数据;

先说下,Preference,File,DataBase这三种方式分别对应的目录是/data/data/PackageName/Shared_Pref,/data/data/PackageName/files,/data/data/PackageName/database。

在Android中通常使用File存储方式是用Context.openFileOutput(StringfileName,intmode)和Context.openFileInput(StringfileName)。

Context.openFileOutput(StringfileName,intmode)生成的文件自动存储在/data/data/PackageName/files目录下,其全路径是/data/data/PackageName/files/fileName。

注意下,这里的参数fileName不可以包含路径分割符(如"

/"

)。

通常来说,这种方式生成的文件只能在这个apk内访问。

但这个结论是指使用Context.openFileInput(StringfileName)的方式。

使用这种方式,每个apk只可以访问自己的/data/data/PackageName/files目录下的文件,原因很简单,参数fileName中不可以包含路径分割符,Android会自动在/data/data/PackageName/files目录下寻找文件名为fileName的文件。

一:

使用SharedPreferences存储数据

首先说明SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,例如:

登录用户的用户名与密码。

其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实例如下:

voidReadSharedPreferences(){

StringstrName,strPassword;

SharedPreferences 

user=getSharedPreferences(“user_info”,0);

strName=user.getString(“NAME”,””);

strPassword=usergetString(“PASSWORD”,””);

voidWriteSharedPreferences(StringstrName,StringstrPassword){

uer.edit();

user.putString(“NAME”,strName);

user.putString(“PASSWORD”,strPassword);

mit();

数据读取与写入的方法都非常简单,只是在写入的时候有些区别:

先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。

实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的FileExplorer中的/data/data/<

packagename>

/shares_prefs下。

以上面的数据存储结果为例,打开后可以看到一个user_info.xml的文件,打开后可以看到:

<

?

xmlversion=”1.0″encoding=”UTF-8″?

>

map>

stringname=”NAME”>

moandroid<

/string>

stringname=”PASSWORD”>

SharedPreferences<

/map>

使用SharedPreferences是有些限制的:

只能在同一个包内使用,不能在不同的包之间使用。

二:

文件存储数据

文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。

FilterInputStream,FilterOutputStream等可以到Javaiopackage说明中去详细学习,不再此详细说明,具体实例如下:

Stringfn=“moandroid.log”;

FileInputStreamfis=openFileInput(fn);

FileOutputStreamfos=openFileOutput(fn,Context.MODE_PRIVATE);

除此之外,Android还提供了其他函数来操作文件,详细说明请阅读AndroidSDK。

三:

网络存储数据

网络存储方式,需要与Android网络数据包打交道,关于Android网络数据包的详细说明,请阅读AndroidSDK引用了JavaSDK的哪些package?

四:

ContentProvider

1、ContentProvider简介

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。

虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:

采用文件方式对外共享数据,需要进行文件操作读写数据;

采用sharedpreferences共享数据,需要使用sharedpreferencesAPI读写数据。

而使用ContentProvider共享数据的好处是统一了数据访问方式。

2、Uri类简介

Uri代表了要操作的数据,Uri主要包含了两部分信息:

1.需要操作的ContentProvider,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:

1.scheme:

ContentProvider(内容提供者)的scheme已经由Android所规定为:

content:

//。

2.主机名(或Authority):

用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

3.路径(path):

可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

要操作contact表中id为10的记录,可以构建这样的路径:

/contact/10

要操作contact表中id为10的记录的name字段,contact/10/name

要操作contact表中的所有记录,可以构建这样的路径:

/contact?

要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:

要操作xml文件中contact节点下的name节点,可以构建这样的路径:

/contact/name

如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:

Uriuri=Uri.parse("

//com.changcheng.provider.contactprovider/contact"

3、UriMatcher、ContentUrist和ContentResolver简介

因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。

Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher和ContentUris。

掌握它们的使用,会便于我们的开发工作。

UriMatcher:

用于匹配Uri,它的用法如下:

1.首先把你需要匹配Uri路径全部给注册上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。

UriMatcheruriMatcher=newUriMatcher(UriMatcher.NO_MATCH);

//如果match()方法匹配content:

//com.changcheng.sqlite.provider.contactprovider/contact路径,返回匹配码为1

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact”,1);

//添加需要匹配uri,如果匹配就会返回匹配码

//如果match()方法匹配content:

//com.changcheng.sqlite.provider.contactprovider/contact/230路径,返回匹配码为2

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact/#”,2);

//#号为通配符

2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content:

//com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配码为1。

ContentUris:

用于获取Uri路径后面的ID部分,它有两个比较实用的方法:

withAppendedId(uri,id)用于为路径加上ID部分

parseId(uri)方法用于从路径中获取ID部分

ContentResolver:

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Activity提供的getContentResolver()方法。

ContentResolver使用insert、delete、update、query方法,来操作数据。

五:

总结说明

以上5中存储方式,在以后的开发过程中,根据设计目标、性能需求、空间需求等找到合适的数据存储方式。

Android中的数据存储都是私有的,其他应用程序都是无法访问的,除非通过ContentResolver获取其他程序共享的数据。

采用文件方式对外共享数据,需要进行文件操作读写数据;

采用sharedpreferences共享数据,需要使用sharedpreferencesAPI读写数据。

8.如何启用Service,如何停用Service

Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。

服务的开发比较简单,如下:

第一步:

继承Service类

publicclassSMSServiceextendsService{

第二步:

在AndroidManifest.xml文件中的<

application>

节点里对服务进行配置:

serviceandroid:

name="

.SMSService"

/>

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。

这两个方法都可以启动Service,但是它们的使用场合有所不同。

使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。

使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2