安卓面试题及答案详解Word格式.docx

上传人:b****5 文档编号:19935674 上传时间:2023-01-12 格式:DOCX 页数:8 大小:29.01KB
下载 相关 举报
安卓面试题及答案详解Word格式.docx_第1页
第1页 / 共8页
安卓面试题及答案详解Word格式.docx_第2页
第2页 / 共8页
安卓面试题及答案详解Word格式.docx_第3页
第3页 / 共8页
安卓面试题及答案详解Word格式.docx_第4页
第4页 / 共8页
安卓面试题及答案详解Word格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

安卓面试题及答案详解Word格式.docx

《安卓面试题及答案详解Word格式.docx》由会员分享,可在线阅读,更多相关《安卓面试题及答案详解Word格式.docx(8页珍藏版)》请在冰豆网上搜索。

安卓面试题及答案详解Word格式.docx


onStart():

activity变为在屏幕上对用户可见时调用。


onResume():

activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。


onPause():

activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!


onStop():

activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart():

重新启动activity时调用。

该活动仍在栈中,而不是启动新的活动。

onDestroy():

activity被完全从系统内存中移除时调用,该方法被调用

两个Activity之间跳转时必然会执行的是哪几个方法。


onCrante()//在Activity生命周期开始时调用
onRestoreInstanceState()//用来恢复UI状态
onReStart()//当Activity重新启动时调用
onStart()//Activity对用户即将可见时调用
onResume()//当Activity与用户交互时,绘制界面
onSaveInstanceState()//activity即将移出栈顶保留UI状态时调用onPause()//暂停当前活动activity,􏰀

交持久数据的改变,停止动画和其他占用CPU资源的东西,由于下一个activity在这个方法返回之前不会resume,所以这个方法的代码执行要快。

onStop()//activity不再可见时调用

onDestroy()//在Activity销毁钱被调用的最后一个方法。

横竖屏切换时候Activity的生命周期。


1、不设置Activity的android:

configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:

configChanges="

orientation"

时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:

orientation|keyboardHidden"

时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

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


1、在你的styles.xml文件中可以新建一如下的类似Dialog的style
<

stylename="

Theme.FloatActivity"

parent="

android:

style/Theme.Dialog"

>

/style>


2、在AndroidManifest.xml中在你需要显示为窗口的activity中添加如下属性:

android:

theme="

@style/Theme.FloatActivity"

即可

也可以直接添加您对应需要展示为Dialogstyle的Activity的android:

theme属性值为android:

@android:

你后台的Activity被系统回收怎么办?


系统会帮我们记录下回收前Activity的状态,再次调用被回收的Activity就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState。

savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象,我们使用savedInstanceState可以恢复到回收前的状态。

如何退出Activity?

如何安全退出已调用多个Activity的Application?


用finish()方法退出activity.
在2.1之前,可以使用ActivityManager的restartPackage方法。

它可以直接结束整个应用。

在使用时需要权限android.permission.RESTART_PACKAGES。

在2.2,这个方法失效了,可使用以下几个人工的方法

1、记录打开的Activity:


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

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

2、发送特定广播:


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

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

被回收前调用onSaveInstanceState()方法保存当前状态。

两个Activity之间怎么传递数据?


在Intent的对象中增加要传递的参数既可。

在Intent的对象的请求中加入键值对,对象名字.putExtra("

键值对的名字"

"

键值对的值"

);

在另一个Activity中将Intent请求中的数据取出来:

Intentintent=getIntent();

//
Stringvalue=intent.getStringExtra("

testIntent"

//将testIntent对应的值赋值给value

什么是Activity?

通俗一点说Activity就是一个界面,这个界面里面可以放置各种控件。

Activity的界面也是用xml文件表示的,放置在res->

layout下面。

每生成一个新的Activity后,我们需要在AndroidManifest.xml中注册一下这个activity

怎么在启动一个Activity时就启动一个service?

将启动Service的语句放在onCreate()方法中。

同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?


可以放在不同的Task中。

需要为不同的activity设置不同的taskaffinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记。

Activity怎么和service绑定,怎么在activity中启动自己对应的service?

1、Activity能进行绑定得益于Service的接口。

为了支持Service的绑定,实现onBind方法。

2、Service和Activity的连接可以用ServiceConnection来实现。

你需要实现一个新的ServiceConnection,重写onServiceConnected和onServiceDisconnected方法,一旦连接建立,你就能得到Service实例的引用。


3、执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显式或隐式)和一个你实现了的ServiceConnection实例

什么是Service以及􏰁

述下它的生命周期。


AndroidService是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。

需要通过某一个Activity或者其他Context对象来调用,Context.startService()和Context.bindService()。

如果在Service执行耗时的操作需要启动一个新线程来执行。


AndroidService只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

Service有哪些启动方法,有什么区别,怎样停用Service?


两种启动Service的方式Context.startService()和Context.bindService()。

区别
为Context.startService():

Service会经历onCreate->

onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();

如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);

stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。

该Service的调用者再启动起来后可以通过stopService关闭Service

Context.bindService():

Service会经历onCreate()->

onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。

这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->

onDestroyed相应退出,所谓绑定在一起就共存亡了。

停用service使用context.stopService()

不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

a使用startActivityForResult()方法开启b,b类结束时调用finish();


a类的intent有一个子activity结束事件onActivityResult(),在事件里继续播放音乐

什么是IntentService?

有何优点?


IntentService也是一个Service,是Service的子类,
IntentService和Service有所不同,通过Looper和Thread来解决标准Service中处理逻辑的阻塞问题。

优点:

Acitivity的进程,当处理Intent的时候,会产生一个对应的ServiceAndroid的进程处理器现在会尽可能的不kill掉你
非常容易使用
日历中IntentService的应用

什么时候使用Service?


比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。

Intent传递数据时,可以传递哪些类型数据?

Intent间传送数据一般有两种常用的办法:

1.extra
2.data.

extra可以用Intent.putExtra放入数据。

新启动的Activity可用Intent.getExtras取出来Bundle,然后用Bundles.getLong,getInt,getBoolean,getString等函数来取放进入的值。

而data则是传输url。

url可以是指我们熟悉的http,ftp等网络地址,也可以指content来指向ContentProvider􏰀

供的资源。

Intent.setData可以放入数据,Intent.getData可以取出数据。

说说Activity,Intent,Service是什么关系。


一个Activity通常是一个单独的屏幕,每一个Activity都被实现为一个单独的类,这些类都是从Activity基类中继承来的,Activity类会显示由视图控件组成的用户接口,并对视图控件的事件做出响应。


Intent的调用是用来进行架构屏幕之间的切换的。

Intent是􏰁

述应用想要做什么。

Intent数据结构中两个最重要的部分是动作和动作对应的数据,一个动作对应一个动作数据。

AndroidService是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。

需要通过某一个Activity或者其他Context对象来调用。


Activity跳转到Activity,Activity启动Service,Service打开Activity都需要Intent表明跳转的意图,以及传递参数,Intent是这些组件间信号传递的承载者。

述一下BroadcastReceiver。


BroadcastReceiver用于接收并处理广播通知(broadcastannouncements)。

多数的广播是系统发起的,如地域变换、电量不足、来电来信等。

程序也可以播放一个广播。

程序可以有任意数量的broadcastreceivers来响应它觉得重要的通知。

broadcastreceiver可以通过多种方式通知用户:

启动activity、使用NotificationManager、开启背景灯、振动设备、播放

声音等,最典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。

通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个BroadcastReceiver来监听到这些Intent并获取Intent中的数据。

在manifest和代码中如何注册和使用broadcastreceiver。

1)在AndroidManifest.xml中注册

receiverandroid:

Receiver1"

!

--和Intent中的action对应-->

com.forrest.action.mybroadcast"

/>

/receiver>

2)在代码中注册

1.IntentFilterfilter=newIntentFilter("

//和广播中Intent的action对应

2.MyBroadcastReceiverbr=newMyBroadcastReceiver();

3.registerReceiver(newMyBroadcastReceiver(),filter);

请介绍下ContentProvider是如何实现数据共享的。

ContentProvider是通过􏰀

供Uri来实现数据共享

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

Android􏰀

供了5种方式存储数据:

使用SharedPreferences存储数据;

文件存储数据;

SQLite数据库存储数据;


使用ContentProvider存储数据;

网络存储数据;

为什么要用ContentProvider?

它和sql的实现上有什么差别?


使用ContentProvider可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。

它的底层是用SQLite数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层􏰀

供的是Uri。

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


最常用的布局方式为LinearLayout、RelativeLayout、FrameLayout、TableLayoutAbsoluteLayout。

其中LinearLayout和RelativeLayout是最常用的方式,他们可以通过在xml配置文件或者代码中进行布局。

FrameLayout最简单的布局方式,放置的控件都只能罗列到左上角,控件会有重叠,不能进行复杂的布局。


LinearLayou可以通过orientation属性设置线性排列的方向是垂直(vertical)还是纵向(horizontal).每行或每列只有一个元素,可以进行复杂的布局。

AbsoluteLayout可以让子元素指定准确的x/y坐标值,并显示在屏幕上。

AbsoluteLayout没有页边框,允许元素之间互相重叠(尽管不推荐)。

他是绝对坐标,所以在实际中不􏰀

倡使用。


RelativeLayout允许子元素指定他们相对于其它元素或父元素的位置(通过ID指定)。

因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。

元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。

这个是相对于AbsoluteLayout的,采用的相对坐标,所以在实际中比较常用。

TableLayout将子元素的位置分配到行或列中。

一个TableLayout由许多的TableRow组成,每个TableRow都会定义一个row。

TableLayout容器不会显示row、column或cell的边框线。

每个row拥有0个或多个的cell;

和html中的table差不多。

在实际中也经常使用。

有的时候我们也会用到GridView,就像我们手机屏幕上摆放的各个图标应该就是用GridView排版的。

Padding是文字相对于边框,而Margin是边框相对于父窗体。

谈谈UI中,Padding和Margin有什么区别?


Padding是文字相对于边框,而Margin是边框相对于父窗体。

 

AIDL的全称是什么?

如何工作?

能处理哪些类型的数据?


AIDL是一种接口定义语言,用于约束两个进程间的通信规则,供编译器生成代码,实现Android设备上的进程间通信。


进程之间的通信信息首先会被转换成AIDL协议消息,然后发送给对方,对方受到AIDL协议消息后再转换成相应的对象。


AIDL支持的类型包括Java基础类型和String,List,Map,CharSequence,如果使用自定义类型,必须实现Parcelable接口。

 

如何加载的音乐信息,如何改善其效率。


Android系统􏰀

供了MediaScanner,MediaProvider,MediaStore等接口,并且􏰀

供了一套数据库表格,通过ContentProvider的方式􏰀

供给用户。

当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫􏰁

SD卡和手机内存上的媒体文件,如audio,video,图片等,将相应的信息放到定义好的数据库表格中。

改善效率可以从界面需要查询必备数据,不需要的不进行查询。

启动应用后,改变系统语言,应用的语言会改变么?


不会


Android程序与Java程序的区别?


android程序是Java编写的,但程序使用的android开发的API,就是andriod的库。

 

dvm的进程和Linux的进程,应用程序的进程是否为同一个概念
DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.

如何判断是否有SD卡?

在程序中访问SDCard,你需要申请访问SDCard的权限。

在AndroidManifest.xml中加入访问SDCard的权限如下:

--在SDCard中创建与删除文件权限-->

uses-permissionandroid:

android.permission.MOUNT_UNMOUNT_FILESYSTEMS"

--往SDCard写入数据权限-->

android.permission.WRITE_EXTERNAL_STORAGE"

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。

 

谈谈Android的优点和不足之处。

Android系统中GC什么情况下会出现内存泄露呢?

出现情况:


1.数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview
衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/
3.Bitmap对象不使用时采用recycle()释放内存

AndroidUI中的View如何刷新。


一般只是希望在View发生改变时对UI进行重绘。

你只需在Activity中显式地调用View对象中的invalidate()方法即可。

系统会自动调用View的onDraw()方法。

什么是ANR如何避免它?

android中的动画有哪几类,它们的特点和区别是什么?


两种,一种是Tween动画、还有一种是Frame动画。

Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

handler

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

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1