sqliteAndroid初级面试题


Android初级:

1.理解Android系统架构

应用层:
Java应用开发工程师开发的具备应用程序比如地图,浏览器,QQ等属于该层,手机中的短信,拨号,浏览器等那么些应用程序都是可以被开发人员开发的其它应用程序所替换,这一点不同于其他手机操作系统固化在系统里面的系统软件,更加灵活和个性化

运用框架层:Java framework层源码OS定制开发为应用层开发人士提供API

系统运行库层: C语言包括C语言标准库,多媒体库,OpenGL ES, SQLite,
Webkit,Dalvik虚拟机等,该层是对运用框架层提供支撑的层,
Java访问硬件需经过NDK实现

Linux内核层:Android是基于Linux2.6内核,其基本系统服务如安全性、内存管理、进程管理、网路协商以及驱动模型都看重于Linux内核

DVM与JVM区别

http://yxwang0615.iteye.com/blog/947245

区别一:dvm执行的是.dex格式文件jvm执行的是.class文件android程序编译完将来生产.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和.dex文件等包裹成.apk文件。apk就是android
package的意趣。jvm执行的是.class文件。

区别二:dvm是依照寄存器的虚拟机而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以按照硬件实现最大的优化,相比较相符运动设备。

有别于三:.class文件存在不少的冗余信息,dex工具会删除冗余信息,并把装有的.class文件整合到.dex文件中。减弱了I/O操作,进步了类的探寻速度

2.控制如何搭建Android开发条件

需准备的工具与开发包(32位/64位, Windows/Linux) :JDKeclipse ADTSDK

1)安装JDK配置环境变量(bin)

2)安装eclipse

3) eclipse安装ADT插件—离线安装

4) eclipse指定SDK目录

5)配置SDK环境变量(toots, platform-tools)

注: Linux常用操作系统: Red Hat, Ubuntu

3.明白Android项目目录结构

1.src目录:src(即Source
Code),src目录用来存放在应用程序中具有的源代码,代码的源文件一般存放在该目录下的对应的包下。

2.gen索引:gen目录,该目录下一般只有一个
文件,即R文件。该公文夹上边有个R.java文件,R.java是在创建项目时自动生成的,定义该品种具有资源的目录。

3.Android4.1目录:该文件夹下包含android.jar文件,这是一个Java归档文件,其中带有构建应用程序所需的享有的Android
SDK库(如Views、Controls)和APIs。

由此android.jar将团结的应用程序绑定到Android SDK和Android
Emulator,这允许你采用具有Android的库和包,且使您的应用程序在适度的环境中调剂。

4.assets索引:该目录存放应用程序中行使的外表资源文件,如声音
录像等,在Android程序中得以因此输入/输出流对该目录中的文件进行读写。

5.res目录:该目录用来存放程序这用到的图纸、界面布局文件及XML格式的叙述文件。该目录下有两个目录。新建一个Android项目,在res目录下一般

会有drawable,layout,valuse多少个目录。drawable用来存放在图片资源,目录下一般会有五个目录分别寄存高中低二种不同分辨率的图纸,layout目录用来存放应用程序的

界面布局文件,values目录下存放字符串资源,颜色资源,数组资源等XML文件。

6.AndroidManifest.xml

  1. Android中asset文件夹和raw文件夹区别?

答:res/raw和assets的相同点:

相互目录下的文件在卷入后会原封不动的保存在apk包中,不会被编译成二进制。

res/raw和assets的不同点:

1)res/raw中的文件会被映射到R.java文件中,访问的时候一向利用资源ID即R.raw.filename;assets文件夹下的公文不会被映射到R.java中,访问的时候需要AssetManager类。

2)res/raw不得以有目录结构,而assets则可以有目录结构,也就是assets目录下得以再建立文件夹

3)读取文件资源举例:

读取res/raw下的文件资源,通过以下办法得到输入流来举行写操作

InputStreamis=getResources().openRawResource(R.raw.filename);

读取assets下的公文资源,通过以下方法获取输入流来进行写操作

AssetManageram=null;

am=getAssets();

InputStreamis=am.open(“filename”);

5.通晓AndroidManifest.xml结构(应用程序入口)

AndroidManifest.xml是每个android程序中务必的文本。它置身整个项目标根目录,描述了package中爆出的零部件(activities,services,等等),他们分其它实现类,各类能被处理

的数码和起步地点。除了能声称程序中的Activities, ContentProviders,
Service(Service)s,和Intent
Receivers,仍能指定permissions和instrumentation(安全控制和测试)

AndroidManifest.xml结构

Android程序入口:

action节点中的android.intent.action.MAIN讲明它所在的Activity是全体应用程序的入口点

6.左右模拟器的采取以及常用adb命令

  1. adb devices

查阅当前连日装置

  1. adb kill-server

终止adb进程

  1. adb start-server

启动adb进程

  1. adb shell

进入shell格局(Linux格局),当连接有三个装备时,需执行命令

adb -s设备名shell

注:进入shell格局后序执行Linux命令

  1. adb install apk路径

安装apk至设备,当连接有五个设施时,需执行命令

adb -s设备名install apk路径

当设备在此以前所有次apk时,替换安装序执行命令

adb install -r apk路径

  1. adb uninstall要卸载的拔取包名

卸载已安装的使用

  1. adb push要拷贝的文书路径 设备上存放次文件的门径

将文件拷贝至设备sdcard,如adb push
F:\Android授课资料\品种实训\1205A\apk\com.moluo.android_100111.apk
/sdcard

  1. adb pull设备上文件路径电脑存放文件路径

将文件从设备拷贝到电脑,如adb pull /sdcard/com.moluo.android_100111.apk
E:/

  1. adb logcat

命令行的艺术查看日志

若希望将日志保存至某文件,adb logcat -> E:/test.txt

  1. android list avd

翻开当前创制的持有模拟器列表

  1. emulator @模拟器名字

启动某个模拟器

12.命令行操作数据库

adb shell

cd data/data

cd package

cd databases/cd shared_prefs/ cd files

sqlite3 test.db

>.tables

即可实施响应sql语句

7.领会Activity的生命周期及各艺术调用时机

答:共有两个周期函数:

voidonCreate(BundlesavedInstanceState)第一次创制时调用

voidonStart()被用户可见时调用

voidonRestart()当Activity处于stop状态又被另行启动时调用

voidonResume()当得到主旨即可与用户交互时调用

voidonPause()当失去主旨时调用

voidonStop()当不可见时调用

voidonDestroy()当销毁时调用

Activity A—> Activity B, B将A完全覆盖时生命周期调用流程:

onPause(A) –> onCreate(B) –> onStart(B) –> onResume(B)
–> onStop(A)

这时按”Back”按键,讲明周期调用流程

onPause(B) –> onRestart(A) –> onStart(A) –>onResume(A)
–> onStop(B) –> onDestroy(B)

作业:屏幕方向爆发变更时怎么着生命周期?

&&&&&& Android的5个经过等级?

Adroid的5个过程等级

5个经过等级分别为:Foreground Process (前台进程)、Visible
Process、瑟维斯(Service) Process、Background Process和Empty
Process。这个经过等级不同,他们的安全先行级也对应不同,有高低之分。上边分别授课。

1、Foreground Process (前台进程)

什么样的一个历程才是前台进程呢? 如下情状:

a正处在Activity
Resume()状态b正处在与bound服务交互的状态c正处在服务在前台的情状,(startForeground()被调用)d
Service(Service)生命周期函数正在被执行(onCreate(),onStart(),onDestroy())e
布罗德castReceiver正在推行onReceive()方法

着力总括一下,也就是移动在相互,服务在前台执行,广播在吸收,三者其中之一满足的这些历程,都是前台进程。从安全先行级的角度来说,杀死Foreground
Process需要用户响应,因为这一个安全先行级是参天的。

**再回顾一下我们Activity的四种状况的率先种:Active/Runing**情形。在这个状态下,Android系统一般不会杀死这一个Activity,除非暴发特别(ANR
applicationnot response如故是FC force
close)。是不是也是最高的优先级吧?2、Visible
ProcessActivity不在前台显示,但也远非藏匿,可以看的见,比如弹出一个对话框(input
Method)一个bound到visible或者foreground的activity的Service,或者是一个输入法。**

这种进程等级就对应了Activity的情景:Paused。3、ServiceProcess正在周转的,不在上述二种状态的Service(Service)4、Background
Process不可见状态的Activity进程,onStop()被调用

很肯定,对应Activity状态的Stoped。5、Empty
Process没有运行任何Components的历程,保留这一个历程最首假设为着缓存的需要。

从以上分析来看,4个活动状态和5个经过等级具有密不可分的联络。还需融会贯通。

  1. Activity四种启动形式

在AndroidManifest.xml清单文件中的标签中经过android:launchMode设置Activity启动形式

standard默认值,表示在startActivity时即创办其实例

singleTop首先检查栈顶是否有该Activity实例,有责重回,无责创设其实例

singleTask检查整个堆栈有无该Activity实例,有责再次回到,无责创设其实例

singleInstance单实例情势,一个Activity实例独享一个任务堆栈,并且只好有一个仓库中有该Activity的实例

9.AndroidManifest.xml清单文件标签中属性android:excludeFromRecents=”true”android:screenOrientation=”portrait”android:configChanges=”orientation|locale”的意思

答:android:excludeFromRecents表示是否可被出示在最近打开的activity列表里,true表示否,false表示是

android:screenOrientation表示activity彰显的情势,一般用来设置activity横屏呈现(horizontal)或竖屏展现(portrait)

android:configChanges=[oneormoreof:”mcc””mnc””locale””touchscreen””keyboard””keyboardHidden””navigation””orientation””fontScale”]

是当所指定属性(ConfigurationChanges)暴发变动时,文告顺序调用onConfigurationChanged()函数,比如orientation屏幕方向暴发改变,locale语言环境发生改变时

10.什么将一个Activity设置成窗口的样式

答:在清单文件AndroidManifest.xml中相应的标签内设置属性android:theme=”@android:style/Theme.Dialog”

  1. Activity的onSaveInstanceState()和onRestoreInstanceState()

答:Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它们不同于onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当使用碰到意外情况(如:内存不足、用户一直按Home键)由系统销毁一个Activity时,onSaveInstanceState()会被调用。可是当用户主动去销毁一个Activity时,例如在动用中按重临键,onSaveInstanceState()就不会被调用。因为在这种景观下,用户的行为决定了不需要保存Activity的意况。平时onSaveInstanceState()只适合用来保存一些临时的情状,而onPause()适合用于数据的持久化保存。

此外,当屏幕的主旋律暴发了变动,Activity会被摧毁并且被重新成立,假设您想在Activity被损毁前缓存一些多少,并且在Activity被重复创造后重操旧业缓存的多少。可以重写Activity的onSaveInstanceState()和onRestoreInstanceState()方法。

12.列举Android中各种UI特效

答:三个Activity切换时动画设置:
startActivity之后调用overridePendingTransition(int enterAnim,
intexitAnim)

Fragment切换时动画效果

图形轮播效果:通过Gallery配合提姆(Tim)er定时器实现

瀑布流效果:

&侧滑菜单:

CoverFlow:

Path菜单:

&关键字飞入飞出效果:

翻页效果:

ViewPager:

Fragment:

自定义Tabhost:

刊登评论图文混排:

13.自定义组件的贯彻思路

答:Android自定义组件有二种实现思路:

1)继承某个现有组件,在其基础上添加额外效能,如连续Gallery实现CoverFlow效果

2)复合型组件定义:继承某个Layout,实现复合组件自定义,如TextView和EditText组合实现登录注册组件

3)继承View,实现onDraw()方法,实现协调绘制组件,如翻页效果组件

14.谈谈UI中,Padding和Margin有哪些分别,gravity与layout_gravity的区别

答:Padding用来指定组件内的情节距离组件边界的偏离;

Margin用来指定控件与控件之间的距离

Gravity用来指定组件内的始末相对于组件本身的职务

Layout_gravity用来指定组件相对于其父组件的岗位

15.哪些组件可以实现手风琴效果,用来实现设置界面的类,实现抽屉效果,悬浮窗口?

答:实现手风琴效果(ExpandableListView)

安装界面的类(PreferenceActivity)保存到sharedpreference中

抽屉效果(slidingDrawer)组件

浮动窗口:PopWindow,能够实现类似Dialog和菜单的意义

16.listview优化策略?

答:1)、自定义艾达pter的getView(),对convetView举行判空,是当convertView不为空的时候从来重新采取convertView

之所以减弱了累累不必要的View的创导

2)定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新行使即可

3)、当ListView加载数据量较大时得以应用分页加载和图表异步加载

17.ListView分页加载实现思路?

通常实现分页加载有二种艺术,一种是在ListView底部安装一个按钮,用户点击即加载。另一种是当用户滑动到底层时自动加载。

在ListView底部安装一个按钮,用户点击即加载实现思路:

//加上底部View,注意要放在setAdapter方法前

ListView.addFooterView(moreView);

bt.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

pg.setVisibility(View.VISIBLE);//将进度条可见

bt.setVisibility(View.GONE);//按钮不可见

handler.postDelayed(newRunnable(){

@Override

publicvoidrun(){

loadMoreDate();//加载更多多少

bt.setVisibility(View.VISIBLE);

pg.setVisibility(View.GONE);

mSimpleAdapter.notifyDataSetChanged();//通告listView刷新数据

}

},2000);

}

});

当用户滑动到底层时自动加载实现思路:

实现OnScrollListener接口重写onScrollStateChanged和onScroll方法,使用onscroll方法实现”滑动“后甩卖检查是不是还有新的笔录,假诺有,添加记录到adapter,adapter调用notifyDataSetChanged更新数据;假设没有记录了,则不再加载数据。使用onScrollStateChanged可以检测是否滚到最终一行且截至滚动然后实施加载.

18.ListView图片异步加载实现思路?

1.先从内存缓存中拿到图片展示(内存缓冲)

2.收获不到的话从SD卡里获取(SD卡缓冲,,从SD卡获取图片是放在子线程里执行的,否则神速滑屏的话会不够流畅)

3.都取得不到的话从网络下载图片并保留到SD卡同时参预内存并显示(视情况看是不是要出示)

19.view有哪三种更新模式

答:在主线程(UI线程)可以直接调用View.invalidate();在子线程需要更新UI能够一贯调用View.postInvalidate(),也得以通过Handler发送信息给主线程,然后在handleMessage方法中经过View.invalidate()更新UI;还足以在子线程中需要更新UI的时候调用runOnUIThread(Runnable
)方法,然后在此形式中更新UI,同时可以拔取AsyncTask异步任务,在doInBackground执行耗时操作,然后在onPostExcute方法中执行刷新UI动作

20.Intent的原理,效能,可以传递哪些类型的参数?

答:intent是连接Activity,Service(Service),布罗德castReceiver,ContentProvider四大组件的投递员,,能够传递八种基本数据类型以及string,Bundle类型,以及落实了Serializable或者Parcelable的项目。

Intent可以划分成显式意图和隐式意图。

显式意图:调用Intent.setComponent()或Intent.setClass()方法肯定指定了组件名的Intent为显式意图,显式意图分明指定了Intent应该传递给哪个组件。

隐式意图:没有显然指定组件名的Intent为隐式意图。Android系统会基于隐式意图中设置的动作(action)、体系(category)、数据(URI和数据类型)找到最合适的零部件来处理这些打算。

21.Android的四大组件是何许?它们的功用是何许?

答:Android有四大组件:Activity、瑟维斯(Service)、布罗德(Broad)castReceiver、ContentProvider。

Activity:应用程序中,一个Activity通常就是一个单身的屏幕,它下边能够显得一些控件也足以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

Service服务:一个瑟维斯(Service)(Service)是一段长生命周期的,没有用户界面的先后,可以用来开发如监控类程序。

布罗德(Broad)castReceive广播接收器:你的采取可以采纳它对表面事件举办过滤只对感兴趣的外表事件(如当电话呼入时,或者数据网络可用时)进行收纳并做出响应。广播接收器没有用户界面。但是,它们得以启动一个activity或serice来响应它们收到的信息。

ContentProvider内容提供者:重要用以四个利用间数据共享。这么些数量可以储存在文件系统中或SQLite数据库。

22.叙述下瑟维斯(Service)(Service)的生命周期,Service有咋样启动方法,有怎么着分别,如何停用瑟维斯(Service)?**

http://blog.csdn.net/huanyufeng/article/details/5873407

答:瑟维斯(Service)的生命周期:onCreate,onStartCommand,onDestroy,onBind和onUnbind。

普普通通有二种方法启动一个瑟维斯(Service),它们对Service生命周期的影响是不平等的。

1)通过context.startService()onCreate–>onStartCommand–>onDestroy

瑟维斯(Service)(Service)会经历onCreate到onStartCommand,然后处于运行意况,stopService的时候调用onDestroy方法。

万一是调用者自己一向退出而尚未调用stopService(Service)的话,Service会平昔在后台运行。

只要瑟维斯(Service)(Service)已经启动了,当大家再次启航Service(Service)时,不会在履行onCreate()方法,而是从来实施onStartCommand()方法。

2)通过context.bindService()onCreate–>
onBind—>onUnbind–>onDestroy

瑟维斯(Service)(Service)会运行onCreate,然后是调用onBind,这多少个时候调用者和Service绑定在一道。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。

所谓绑定在联合就共存亡了。调用者也足以经过调用unbindService(Service)方法来终止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。

注:onStartCommand()有四种重临值:

http://wenku.baidu.com/view/0c2b1af8910ef12d2af9e7b5.html

START_STICKY:假诺service进程被kill掉,保留service的意况为伊始情状,但不保留递送的intent对象。随后系统会尝试重新创立service,由于服务境况为起初意况,所以创战胜务后决然会调用onStartCommand(Intent,int,int)方法。假若在此期间没有任何启动命令被传送到service,那么参数Intent将为null。

START_NOT_STICKY:“非粘性的”。使用这些再次回到值时,假设在实践完onStartCommand后,服务被特别kill掉,系统将会把它置为started状态,系统不会活动重启该服务,直到startService(Intent
intent)方法重新被调用;。

START_REDELIVER_INTENT:重传Intent。使用这多少个重临值时,假设在举办完onStartCommand后,服务被丰裕kill掉,系统会活动重启该服务,并将Intent的值传入。

START_STICKY_COMPATIBILITY:START_STICKY的配合版本,但不保险服务被kill后肯定能重启。

23.AIDL的齐全是如何?有什么样的功用?**

答:AIDL全称:Androidinterfacedefinitionlanguage(android接口定义语言),

效用:用来跨进程的造访方法,即访问远程服务的方法

http://blog.csdn.net/stonecao/article/details/6425019

aidl实现的手续

aidl可以传递的数据类型

24.咋样制止Android应用中的瑟维斯(Service)被系统回收?

<方案一>:通过设置setForeground()进步瑟维斯(Service)优先级,将其设置为前台进程

要么通过在清单文件中标签内通过安装android:priority=”1000″,提高其优先级

<方案二>:在startCommand()方法中回到START_STICKY或START_REDELIVER_INTENT则瑟维斯(Service)(Service)销毁之后会重启

25.瑟维斯(Service)(Service)是否运行在主线程,Service与Activity是否运行在同一个线程?

瑟维斯(Service)(Service)与Activity与布罗德(Broad)castReceiver同样都运作在UI主线程,倘诺有耗时操作都会引发ANR问题

26.IntentService的用法

http://android.blog.51cto.com/268543/528166

http://blog.csdn.net/zhf198909/article/details/6906786

是瑟维斯(Service)(Service)的子类,紧要用来化解在Service中处理耗时操作.

Intent瑟维斯(Service)(Service)使用队列的主意将呼吁的Intent出席队列,然后打开一个worker
thread(线程)来拍卖队列中的Intent,对于异步的start瑟维斯(Service)请求,IntentService会处理到位一个过后再处理第二个,每一个请求都会在一个独门的worker
thread中处理,不会堵塞应用程序的主线程

27.报了名广播有两种方法,这一个方法有哪些特色和界别?

答:第一种:在清单文件中宣称,添加

第二种接纳代码举行登记如:

IntentFilterfilter=newIntentFilter(“android.provider.Telephony.SMS_RECEIVED”);

IncomingSMSReceiverreceiver=newIncomgSMSReceiver();

registerReceiver(receiver.filter);

两种注册类型的分别是:

1)第两种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第一种是常驻型,也就是说当应用程序关闭后,假使有音讯播报来,程序也会被系统调用自动运行。

28.广播的出殡模式有哪些

sendBroadcast(),sendOrderedBroadcast()sendStickyBroadcast()三种

sendBroadcast()本条点子的广播是可以发送给所有广播接收者,依照注册的先后顺序,假诺您那一个时候设置了播音接收者的优先级,优先级要是刚好与登记顺序相同,则不会有任何问题,假若逐个不相同,会出leaked
IntentReceiver那样的要命,并且在头里的播音接收者不能够调用abort布罗德(Broad)cast()方法将其结束,假设调用会出BroadcastReceiver
trying to return result during a non-ordered
broadcast的可怜,当然,先接到到广播的receiver能够修改广播数据。

sendOrderedBroadcast()措施顾名思义就是priority的属性能起效果,并且在队列前面的receiver可以随时终止广播的发送。还有那一个api能指定final的receiver,那些receiver是最终一个收下广播时间的receiver,并且一定会接到到广播事件,是无法被眼前的receiver拦截的。实际做尝试的景观是这么的,如果自己有3个receiver依序排列,并且sendOrdered布罗德(Broad)cast()方法指定了一个finalReceiver,那么intent传递给这4个Receiver的相继为Receiver1–>finalReceiver–>Receiver2–>finalReceiver–>Receiver3–>finalReceiver。这么些特点可以用来总计连串中能监听某种广播的Receiver的数额。

sendStickyBroadcast()字面意思是发送粘性的播音,使用那多少个api需要权限android.Manifest.permission.BROADCAST_STICKY,粘性广播的表征是Intent会一贯保存到广播事件截止,而这种广播也远非所谓的10秒限制,10秒限制是指普通的播音假设onReceive方法执行时间太长,超越10秒的时候系统会将那么些广播置为能够杀死的candidate,一旦系统资源不够的时候,就会杀死这些广播而让它不举行。

注: (下边是广播接收者的生命周期以及一些细节部分:

1.广播接收者的生命周期是非凡短暂的,在接受到广播的时候创制,onReceive()方法截止将来销毁

2.广播接收者中永不做一些耗时的行事,否则会弹出Application No
Response错误对话框

3.最好也绝不在播放接收者中创造子线程做耗时的工作,因为广播接收者被销毁后经过就成为了空进程,很容易被系统杀掉

4.耗时的较长的劳作最好放在服务中做到)

29.简述Android中的IPC机制(进程间的通信机制)IPC(Inter-ProcessCommunication,进程间通信).

鉴于android系统中应用程序之间不可能共享内存。在android
SDK中提供了4种用于跨进程通讯的主意。这4种形式正好对应于android系统中4种应用程序组件:Activity、Content
Provider、布罗德(Broad)cast和Service(Service)。其中Activity可以跨进程调用其他应用程序的Activity;Content
Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式重回),当然,也能够对另外应用程序的多寡举办增、删、改操
作;布罗德cast能够向android系统中兼有应用程序发送广播,而急需跨进程通讯的应用程序可以监听这多少个广播;Service和Content
Provider类似,也得以访问其他应用程序中的数据,但不同的是,Content
Provider再次来到的是Cursor对象,而Service(Service)重临的是Java对象,这种可以跨进程通讯的劳动叫AIDL服务。

aidl是AndroidInterfacedefinitionlanguage的缩写,它是一种android内部进程通信接口的描述语言,通过它咱们可以定义进程间的通信接口.编译器能够通过扩展名为aidl的文书生成一段代码,通过先行定义的接口达到四个过程之中通信进程的目的.

30.什么是ANR如何避免它?(Android线程间的通信格局?**

答:ANR:ApplicationNotResponding(应用程序无响应).当出现下列意况时,Android就会显示ANR对话框了:对输入事件(如按键、触摸屏事件)的响应领先5秒意向接受器(intentReceiver)超越10秒钟仍未执行完毕Android应用程序完全运转在一个单独的线程中(例如main)。这就意味着,任何在主线程中运行的,需要耗费大量日子的操作都会引发ANR。

缓解方案有两种:

1.AsyncTask异步任务中,doInBackground()和onPostExecute(Result)六个情势非凡重大

doInBackground()这个措施运行在后台线程中,紧要担负履行那多少个很耗时的操作,如运动护理系列中的网络连接、解析XML等操作。该方法必须重载。

onPostExecute(Result)那么些点子也运行于UI线程,在doInBackground(Params…)方法执行后调用,该方法用于拍卖后台任务执行后归来的结果。

2.子thread+handler

31.
Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message,Thread之间的涉及)

一个Handler允许你发送和处理Message和Runable对象,每个线程都有和好的Looper,每个Looper中封装着MessageQueue。Looper负责不断的从自己的消息队列里取出队头的职责或音信执行。每个handler也和线程关联,Handler负责把Message和Runable对象传递给MessageQueue(用到post,sendMessage等措施),而且在这么些目的离开MessageQueue时,Handler负责执行他们(用到handleMessage方法)。

内部Message类就是概念了一个消息,这些音讯中包含一个描述符和任意的数量对象,这一个信息被用来传递给Handler.Message对象提供额外的几个int域和一个Object域。

32.
AsyncTask的重大措施有哪些?怎样启动和平息AsyncTask?怎么着在AsyncTask中更新UI

答: AsyncTask的关键措施有doInBackGround()运行在后台子线程,执行耗时操作

onPostExcute()运行在UI主线程,用于实施刷新UI的代码

开行通过execute()方法

悬停通过cancel(boolean
flag)方法撤废执行,传入参数ture表示假使调用方法时异步任务正在推行则打断执行并裁撤,尽管传false表示执行完毕再收回

刷新UI的代码一般卸载onPostExcute()方法中

33.Android中的五种存储情势及其使用场景

答:1)SharedPreferences

存储路径:(data/data/packagename/shares_prefs),轻量级存储,以键值对的款型储存在xml中,一般用来保存应用中的设置属性

2)文件存储SD卡存储多媒体文件,文件缓存

3)Sqlite数据库嵌入式存储,存储路径:(data/data/packagename/databases),一种嵌入式数据库,援助sql语言,存储大量结构性数据

4)ContentProvider进程(应用程序)间数据共享,数据源可以是sqlite,也足以是xml,相关类:ContentResolver(内容解析器),ContentObserver(

多少观察者)

5)网络存储天气数据的xml,json格式等等,通过HttpUrlConnection,HttpClient,或者SOAP协议获取数据

  1. Android中的动画API,及项目中的应用

答:
Android中有二种动画,帧动画和补间动画,补间动画又有移动,旋转,缩放,渐变动画

3.0将来又有新特征属性动画

花色中采纳境况:项目启动向导动画,
Activity切换时动画效果(overriedPendingTransaction()),类似Tab标签页选中项背景的切换,
Fragment切换时动画效果设置(setTransation()),

ViewPager翻页时动画效果

动画片效果不得以在onCreate()方法中启动,因为此时窗口没有完全渲染成功,可以再onWindowFocusChanged()方法中启动动画

35.广播视频有怎样实现形式?

答:1.拔取系统自带的播放器来播放,指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。

//调用系统自带的播放器

Intentintent=newIntent(Intent.ACTION_VIEW);

intent.setDataAndType(uri,”video/mp4″);

startActivity(intent);

2.采取VideoView组件来播放,可以构成MediaController来实现播控,只是无法轻易改动摄像的轻重缓急及岗位。

3.利用MediaPlayer和SurfaceView来兑现,这种办法很灵活,可以自定义录像播放的深浅和岗位。

36.哪些扫描SD卡所有的多媒体资源:图片,视频,音频

1).通过文件过滤格局扫描(必须制定相应的后缀)

2).通过系统提供的ContentProvider获取

http://ZGC-20130520CLI/svn/pact\_train/

网站地图xml地图