Android-复习重点

Android-复习重点
Android-复习重点

1、Android四大组件是什么(activity,service,content provider,broadcast receiver)

2、Activity生命周期方法有哪些不要与service的生命周期方法记混淆

onCreate():

当activity是被创建时候,会自动运行该方法。该方法做一些初始化动作,比如创建views,设置数据到list等等,该方法提供了一个Bundle类型的变量,该变量中有这个activity 以前的状态信息,前提是以前存过这些信息。这个方法执行完后执行的是onStart()方法;若在onCreate方法中加入finish()方法,onCreate下一个运行onDestroy方法

onRestart():

把activity从onStop状态唤醒时,会用onRestart方法,该方法优先于再次运行的onStart,运行完onRestart之后运行onStart。若在onRestart()方法中加入finish()语句,则还是会继续运行onStart及后面的状态方法直到onDestroy运行完

onStart():

当activity对用户可见时会调用onStart,当activity在前台显示时,会运行onResume;当activity还没在前台显示就被隐藏(停止状态)了会运行onStop(),比如在onStart方法中用了finish()方法的话,onStart()之后就会直接运行onStop->onDestroy。

onResume():

#

当activity开始与用户交互时,会调用onResume,并且为了用户操作此时该activity位于activity栈的顶部。经过某些操作后该方法执行完后执行的是onPause()

onPause():

当一个activity运行到onResume方法后,不管是这个activity要销毁还是要暂停或停止,都会调用该方法。这个方法之后有可能是onResume也有可能是onStop,若是在这个activity-A 中打开一个不完全覆盖这个activity-A的新activity-B,那么activity-A就会是onPause状态,当activity-B退出时,activity-A就直接运行onResume(前提是onPause的方法执行完了,否则会等onPause方法执行完后才运行onResume方法,所以不建议在这个方法中执行CPU密集的操作)。若是需要退出activity-A,那么下一个就会执行onStop。onPause()用于提交未保存发生变化了的持久化数据,及停止动画及其他其他比较消耗CPU的事件(比如广播接收器,传感器(比如GPS),或者消耗电量的资源),这是为了更好的运行新的activity onStop():

当这个activity完全看不见的时候,会调用onStop方法,因为另一个activity会调用onResume并且覆盖这个activity。以下三种情况都会使这个activity调用onStop()方法,第一种是一个新的activity被执行,第二种是一个已经存在的activity被切换到最前端,第三种是这个activity要被销毁。如果通过用户召回这个activity,那么会调用onRestart方法;若这个activity要被销毁,则调用onDestroy方法

onDestroy():

当activity销毁前会调用该方法,比如发生如下情况:activity调用了finish()方法来结束这个activity,或者因为系统为了节省空间而临时销毁这个activity,这两个情况可以通过isFinishing()方法判断

总结:

当用户自己退出程序的时候,建议在onStop方法中保存数据;

当用户打开一个新的activity的时候,建议通过onSaveInstanceState来保存数据;这里在网上看到很多人说应该放在onPause里保存,其实我觉得在打开新的一个activity的时候,或者将程序至于后台的时候,都会默认调用onSaveInstanceState方法,而且在这种暂停的状态下,Android的内存管理机制也不太会杀死这种状态的activity。而用onPause保存的时候,若是下一个执行onResume的方法的话,会影响速度,当然数据量小的话也感觉不出来。)

3、<

4、Back键与home键对Activity的影响有什么不同,哪个会销毁页面(back键

Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity 启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了.如果说程序中存在service之类的,则可以在恰当的位置监听处理下也就可以了.

home键

Android程序的隐藏,当你按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入,会直接显示程序栈中最上层的Activity.)

5、Android应用程序的目录结构的用途,assests与res文件夹的区别

(:不会在文件下生成相应的标记,存放到这里的资源在运行打包的时候都会打入程序安装

包中

:会在文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

在res文件夹下其实还可以定义一下目录:

res/anim:这里存放的是动画资源。

res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件

res/raw:该目录下的文件可以直接复制到设备上,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是)

6、Android中gen文件夹中最重要的是文件,它是系统自动生成的,不能手动修改。

7、文件中各类元素,如,同层次的元素位置,元素属性是否必须设置等。

8、Src values drawable layout 文件夹放什么(

1. src:存放所有的*.java源程序。

2. gen:为ADT插件自动生成的代码文件保存路径,里面的将保存所有的资源ID。

3. assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。

4. res:可以存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本等。

5. res\drawable-hdpi:保存高分辨率图片资源,可以使用(id)可以获得资源类型。

;

6. res\drawable-ldpi:保存低分辩率图片资源,可以使用(id)可以获得资源类型。

7. res\drawable-mdpi:保存中等分辨率图片资源,可以使用(id)可以获得资源类型。

8. res\layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。

9. res\values:存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称:

·:定义数组数据;

·:定义表示颜色的数据;

·:定义尺度,可以使用()获得这些资源;

·:定义字符串,可以使用()或()方法获得这些资源;

·:定义显示的样式文件;

\raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式,()方法可以获得这些资源。

;

11. res\xml:用户自定义的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用()方法获取。

12. res\anim:用于定义动画对象;

13. bin:生成apk的文件夹。)

9、常用xml属性及属性值的意思,如

a ndroid:layout_width 指定组件布局宽度

layout_height指定组件布局高度

android:text 指定控件当中显示的文字

android:hint 来设置当EditText内容为空时显示的文本,这个文本只在EditText为空时显示,你输入字符的时候就消失了,

android:autoText 如果设置,将自动执行输入值的拼写纠正

android:textSize 指定控件当中字体的大小

wrap_content表示根据控件中的内容来确定,也就是说,在满足完全显示控件内容的情况下,把宽度和高度设置为最小。

fill_parent 表示尽可能地充满父控件的空间,如果当前控件是最上层,就是充满整个屏幕10、从当前Activity启动另一个Activity,可以使用哪两种方法有什么区别(

显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。

隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。)

11、Intent 的作用:实现页面跳转,连接四大组件的桥梁

12、ContentProvider的作用:实现应用程序之间的数据共享

13、退出activity的方法(finish onstop 抛出异常强制退出)

14、AlertDialog怎样创建(new ),怎样显示(show),设置“确认”按钮的方法setPositivebutton 设置“取消”按钮的方法setNegativeBu tton

15、Service生命周期的方法:onCreate onStar t ,第一次启动时会执行什么,若已经启动了,再次启动Service会执行哪些方法(当第一次启动的时候先后调用onCreate()和onStart()方法,如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

]

16、Service的两种启动方式分别对应哪两个方法停止呢

(有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1 通过startService Service会经历onCreate -> onStart stopService的时候直接onDestroy 如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。下次调用者再起来可以stopService。

2 通过bindService Service只会运行onCreate,这个时候服务的调用者和服务绑定在一起调用者退出了,Srevice就会调用onUnbind->onDestroyed所谓绑定在一起就共存亡了。并且这种方式还可以使得调用方(例如)调用服务上的其他的方法)

17、关于ContentValues的key-value,key可以是什么类型,value又可以是什么类型(key 为字段名称string,value为字段值boolean,byte,double,float,long,short,string)

18、Android界面元素大小的度量单位有px(不建议用,但可以用)sp(文字)dp(长度)

19、广播的注册方式有动态注册和静态注册,其中动态注册一般在生命周期的对应方法中实现,如onCreat与onDestory onResume与onPause

20、广播的xml静态注册在文件里,标签里都有什么看文件记清楚

21、Sqlite数据库:

!

SqliteDatabase作用:的过程是构建SQLiteDatabase对象的过程,实质是构建SQLiteDatabase 的成员变量SQLiteConnectionPool的过程,该过程是一个获取primaryConnection的过程。SqliteopenHelper的作用SQLiteOpenHelper 可以更方便的管理数据库,version是数据库版本,一般设置成就可以,以后有不同的版本程序可以就行判断啊

SqliteopenHelper的onCreate及onUpgrade方法调用的时机:首先获取数据库的当前版本,当版本号为0的时候,就会执行onCreate方法(当数据库文件第一次创建的时候版本号就是0)如果版本号不为0,同时和最新版本号进行比较,如果大于的话,就执行升级操作onUpgrade 方法,否则就执行降级onDowngrade方法,

22、SharePreferences的作用(保存配置信息),格式为xml,存键值对,存储在哪儿(data/data/包名/shared_prefs)

23、BaseAdapter的内部常用方法的作用(getview getcount),Listview的Item布局设定,事件监听都在哪里实现(adpter用的是继承的baseadapter,给整个listview上的Item设置点击事件就用(listener)就可以,下面介绍如果给Item里面某一控件设置点击事件。方法是重写Adapter。

ListView工作原理(针对下面代码):

1. 给ListView设置数据适配器,此chǔ程序是自己重写的Adapter,创建Adapter 的时候主要做下面的工作:

(1)把ListView需要显示的数据传给Adapter

(2)把ListView显示Item的界面传给Adapter

(3)把上下文对象传给Adapter,主要用来得到LayoutInflater对象来得到Item界面

^

2. 给ListView设置当点击Item对象的时候执行的操作,此chǔ要实现给Item中的各项也就是该程序的三个TextView设置监听器,也就是调用Adapter中的getView函数。)

google推荐借助什么优化ListView(ArrayAdapter、SimpleAdapter和BaseAdapter)

24、Android常用的适配器有哪些(ArrayAdapter、SimpleAdapter和BaseAdapter)

25、ArrayAdapter与SimpleAdapter有什么区别

(只可以简单的显示一行文本;SimpleAdapter可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),

也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示

不同背景等。

26、AsyncTask的常用方法有哪几个每个方法的负责的主要工作是什么

(AsyncTask定义了三种泛型类型Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。

>

Progress 后台任务执行的百分比。

Result 后台执行任务最终返回的结果,比如String。

27、Handler主要是用于解决什么问题的(子线程与主线程通讯)

28、Handler发送消息用什么方法处理消息呢(

andriod提供了Handler 和Looper 来满足线程间的通信。Handler先进先出原则。Looper 类用来管理特定线程内对象之间的消息交换(MessageExchange)。

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。

2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。

;

3) Message Queue(消息队列):用来存放线程放入的消息。

4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。

29、Message里面的what主要作用是什么(what区分消息要做的事情)

30、Android模拟器连接本机Web站点的地址不再是localhost,而是

31、使用SAX解析XML文件的优点是什么

(1,ax方式解析xml的优点;只要有jdk的存在,严格意义上来说是jre,它就可以运行,不依赖任何第三方的jar包。在移动设备上尤为广泛使用。比如Android就使用它来解析xml。当然Android更为推荐的是采用xmlpull来解析xml。这种方式也同样适合javase。我在后期会为大家准备使用xmlpull解析xml的demo

2,SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的

事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点线性解析,不能随机访问,也无法修改原文件

3. 不需要像dom解析那样在内存中建立一个dom对象,占用内存,sax解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。

32、JSON数据格式里常用的两个对象是JSONObject JSONArray

简答题

1、Android常用布局(FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout (绝对布局),RelativeLayout(相对布局),TableLayout(表格布局))

2、Android生命周期方法

3、广播的注册方式有几种,各有什么特点

(注册方式有两种:

1、静态注册,就是在manifest文件里配置一下,这种方式注册的广播属于系统级广播。你的应用没打开也能收到广播。比如你要做一个收到某广播就启动你的应用的功能可以这样搞。

2、动态注册,在代码里执行一个rigisterBroadcastReciver(可能拼写有误)的方法。这种你要自己作好反注册。这种广播可以做成你的应用启动后才监听,关闭后就不监听的效果。

'

4、Service的两种启动方式是什么有什么区别(

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

使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

2.采用()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,

接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并

不会导致多次创建服务,但会导致多次调用onStart()方法。

采用startService()方法启动的服务,只能调用()方法结束服务,服务结束时会调用

Android应用程序工程的主要目录结构有哪些,分别是什么作用(Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application

Framework(开发框架包)、Applications (核心应用程序)

什么是ANR哪些情况会引起ANR(

ANR:Application NotResponding,五秒

在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:

对输入事件(如按键、触摸屏事件)的响应超过5秒

(

意向接受器(intentReceiver)超过10秒钟仍未执行完毕

Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束-- 也不需要调用()或者()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。

Android菜单有几种分别怎么呼出

(Android的菜单分为三种类型:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)

%

一.选项菜单

当用户单击设备上的菜单按钮(Menu),触发事件弹出的菜单就是选项菜单。选项菜单最多只有六个,超过六个第六个就会自动显示更多选项来展示显示。

创建方法:

1、覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打开菜单时调用。

2、调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法为菜单项设置图标。

3、当菜单项(MenuItem)被选中时,覆盖Acitivy的onOptionsMenuSelected()方法响应事件。

二、上下文菜单

当用户长按Activity页面时,弹出的菜单我们称为上下文菜单。我们经常在Windows 中用鼠标右键单击弹出的菜单就是上下文菜单。

1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项MenuItem

2、覆盖onContextItemSelected()方法,响应菜单单击事件

3、调用registerForContextMenu()方法,为视图注册上下文菜单

三、子菜单

子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。

创建子菜单的方法

1、覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项

2、调用SubMenu的add()饭饭,添加子菜单项

3、覆盖onCreateItemSelected()方法,响应菜单单击事件

相关主题
相关文档
最新文档