android笔试题

发布 2024-04-17 03:30:11 阅读 5734

1.请描述下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都有可能被系统干掉 。

2. 如果后台的activity由于某种原因被系统**,如何在**之前保存当前状态。

ons**einstancestate().

程序中的某一个activity a 在运行时,主动或被动的运行另一个新的activity b,这个时候a会执行ons**einstancestate()。b完成以后又回来找a,这个时候有两种情况:一是a被**,二是a没有被**,被**的a就要重新调用oncreate()方法,不同于直接启动的是这回oncreate()里是带上了参数s**edinstancestate;而没被**的就直接执行onresume(),跳过oncreate()。

3. 如何将一个activity设置成窗口样式。

在中activity定义处添加。

android:theme="@android:style/" 或。

android:theme="@android:style/"。

4. 如何退出activity?如何安全退出已调用多个activity的application?

对于单一activity的应用来说,退出很简单,直接finish()即可。当然,也可以用killprocess()和这样的方法。至于退去application则。

在2.1之前,可以使用activitymanager的restartpackage方法。

2.1之后的方法有。

1、抛异常强制退出:

该方法通过抛异常,使程序force close。验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出force close的窗口。

2、记录打开的activity:每打开一个activity,就记录下来。在需要退出时,关闭每一个activity即可。

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

4、递归退出:在打开新的activity时使用startactivityforresult,然后自己加标志,在onactivityresult中处理,递归关闭。

5. 请介绍下android大众常用的五种布局。

framelayout(框架布局)linearlayout(线性布局)absolutelayout(绝对布局)

relativelayout(相对布局)tablelayout(**布局)

1)——framelayout 框架布局,放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素会重叠覆盖上一个子元素,适合浏览单张**。

2)linearlayout 线性布局,是应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位。(默认是垂直)

3)absolutelayout 绝对定位布局,采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下y轴递增,组件定位属性为android:layout_x 和 android:layout_y来确定坐标。

4)relativelayout 相对布局,根据另外一个组件或是顶层父组件来确定下一个组件的位置。和css里面的类似。

5)tablelayout **布局,类似html里的table.使用tablerow来布局,其中tablerow代表一行,tablerow的每一个视图组件代表一个单元格。

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

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

1)使用sharedpreferences存储数据;它是android提供的用来存储一些简单配置信息的一种机制,采用了xml格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。

2)文件存储数据;文件存储方式是一种较常用的方法,在android中读取/写入文件的方法,与j**a中实现i/o的程序是完全一样的,提供了openfileinput()和openfileoutput()方法来读取设备上的文件。

3)sqlite数据库存储数据;sqlite是android所带的一个标准的数据库,它支持sql语句,它是一个轻量级的嵌入式数据库。

4)使用contentprovider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此content provider的各种数据类型。

5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和**(获取)我们存储在网络空间中的数据信息。7。请介绍下contentprovider是如何实现数据共享的。

一个程序可以通过实现一个content provider的抽象接口将自己的数据完全暴露出去,而且content providers是以类似数据库中表的方式将数据暴露。content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种方法:

创建一个属于你自己的content provider或者将你的数据添加到一个已经存在的content provider中,前提是有相同数据类型并且有写入content provider的权限。

8。如何启用service,如何停用service。

1.第一种是通过调用启动,调用结束,startservice()可以传递参数给service

2.第二种方式是通过调用启动,调用结束,还可以通过serviceconnection访问service。

在service每一次的开启关闭过程中,只有onstart可被多次调用(通过多次startservice调用),其他oncreate,onbind,onunbind,ondestory在一个生命周期中只能被调用一次。

9. receiver的生命周期?广播注册的两种方法和区别?android引入广播机制的用意。

生命周期:在onreceive()执行的时候期间。

引入广播机制用意:

可以方便几大组件的信息和数据交互。

b:程序间互通消息(例如在自己的应用程序内监听系统来电)

c:效率上(参考udp的广播协议在局域网的方便性)

d:设计模式上(反转控制的一种应用,类似监听者模式)。

第一种方式:在中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。

具体实现在manifest的application中添加:

上面两个android:name分别是广播名和广播的动作(这里的动作是表示系统启动完成),如果要自己发送一个广播,在**中为:

intent i = new intent(“

sendbroadcast(i);

这样,广播就发出去了,然后是接收。

接收可以新建一个类,继承至broadcastreceiver,也可以建一个broadcastreceiver的实例,然后得写onreceive方法,实现如下:

protected broadcastreceiver mevtreceiver = new broadcastreceiver()

override

public void onreceive(context context, intent intent) {

string action =

if ( /do something

第二种方式,直接在**中实现,但需要手动注册注销,实现如下:

intentfilter filter = new intentfilter();

registerreceiver(mevtreceiver, filter); 这时注册了一个recevier ,名为mevtreceiver,然后同样用上面的方法以重写onreceiver,最后在程序的ondestroy中要注销广播,实现如下:

override

public void ondestroy()

unregisterreceiver(mplayerevtreceiver);

android笔试题

1.请描述下activity的声明周期。2.如果后台的activity由于某种原因被系统 如何在 之前保存当前状态。ons einstancestate 程序中的某一个activity a 在运行时,主动或被动的运行另一个新的activity b,这个时候a会执行ons einstancestate...

SQL笔试题笔试题

家庭住址,联系 create table stu 学号int 姓名varchar 8 年龄int,性别varchar 4 家庭地址varchar 50 联系 int 历varchar 6 3 修改学生表的结构,删除一列信息,家庭住址alter table stu drop column家庭地址4 向...

笔试题 笔试题目大全

一 选择题。选择题有单项选择 双项选择和多项选择三种类型,多项选择题是选择题中难度最大的一种,它并不指定正确答案的个数,可能只有一个是正确的,也可能两个是正确的,也可能全部是正确的。二 判断题。这类试题看似简单,但如思路不对,同样会造成错误。三 填空题。填空题的答案是唯一的,要用简明 准确 完整的语...