【网学网提醒】:网学会员,鉴于大家对Android的基础资料十分关注,会员在此为大家搜集整理了“Android的基础资料”一文,供大家参考学习!
Android
程序基础
一、Android应用
程序的构成
二、应用生命周期应用生命周期?Android引入了一个全新的机制-应用
程序生命周期(LifeCycle)。?多数情况下,一个Android应用运行在一个独立的Linux进程中?应用进程的的生命周期(存活时间)不是由进程自己控制,而是由Android系统决定?影响应用生命周期的主要因素包括:该进程对于用户的重要性,以及当前系统中还剩多少可用内存。
Intent与Actitity
一、Activity?何谓Activity:最简单的就是你可以把Activity看成一个UserInterfaceProgram,原则上它会提供使用者一个交互式的接口功能,那一个activity只有一个UI吗?非也,举例来说:一个email
程序,就可能包含三个activity–邮件列表的activity–显示邮件内容的activity–写新邮件或回复邮件的activity?所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变成"runningactivity",而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。1.2、Activity状态状态:、
?
当一个Activity在屏幕的最上层时(堆栈的最顶端),它就是属于active或running的状态?如果一个Activity失去焦点(focus)但还看得到它的画面(比如:一个新的Activity画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的这个Activity则处在paused的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity自已本身所有的状态及数据都还是存在的,也跟窗口管理
程序windowmanager保持连系着),像这种paused的activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的activity移除。1.3、Activity状态状态-cont?如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop状态的activity是最先被系统考虑拿来释放内存的。?当一个Activity处于pause或stop的状态时,系统可以要求Activity结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必需要能完整的重新启动及回复先前的状态
?
二、Intent?Android使用了一个很特别的类别叫Intent,用来从一个画面跳到另一个画面。?Intent是用来描述一个
程序想要作些什么事情。
?
在Intent的数据结构里有两个很重要的部份,一个是动
作(action)及对数据产生反应(datatoactupon)。action主要的内容有MAIN(
程序的进入点),VIEW,PICK,EDIT等等。data则是用URI的形示来表示。比如:想要查看一个人的联络数据时,你需要建立一个Intent,它包含了VIEW的动作(action)及指向该人数据的URI描述句。
三、IntentFilter?当Intent要求做某些事情时,IntentFilter被用来描述这个activity能够做些什么事情。比如一个activity要能够显示个人联络数据,你就必需要在IntentFilter说明你要如何处理个人联络数据并用ACTION_VIEW呈现出来。?IntentFilter都会在AndroidManifest.xml清单里面声明。四、BroadcastIntentReceiver?当你想要写一个程序来对外部的事件做些处理时,可以使用BroadcastIntentReceiver。比如:当电话响时,有短信时。BroadcastIntentReceiver它并不能拿来显示UI画面,它必需利用NotificationManager来通知使用者他们感兴趣的事件发生了。?BroadcastIntentReceiver同样的可以在AndroidManifest.xml中声明,但你也可以用写Context.registerReceiver()程序的方式来
注册你自己的BroadcastIntentReceiver。你自己的程序并不会因为BroadcastReceivers被呼叫而被它执行起来。而是当BroadcastReceiver被触发时系统会依需求来执行相对应的程序。程序可以利用Context.sendBroadcast()来发出他们自己的intentbroadcast给其它的程序。五、Intent与Activity?画面的切来切去则是由resolvingintent来实现的。当你想产生新的画面时,现行的activity就使用startActivity(myIntent)。?系统会根据所有已安装的程序所定义的intentfilter来看那个程序是最适合myIntent。?当startActivity被呼叫时,resolvingIntents的处理过程是伴随而来的。resolvingintent提供我们两个好处:–让Activities可以很容易的利用Intent的方式去使用别的
程序的功能。–Activities可以很容易的在任何情况下由新Activity所取代。
服务)使用Service(服务服务
一.定义:服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用
程序进程的上下文(context)里面,这取决于自身的需要。其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。例如媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐依然可以继续播放,这时就是由服务(service)来保证当用户界面关闭时音乐继续播放的。二、如何使用Service如何使用?第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service。
第二种方式是通过调用Context.bindService()启动,调用Context.unbi
ndservice()结束,还可以通过ServiceConnection访问Service。二者可以混合使用,比如说我可以先startService再bindservice。三、Service的生命周期?startService后,即使调用startService的进程结束了Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())就没法了?bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,当然期间也可以调用unbindservice让Service结束。?两种方式混合使用时,比如说你startService了,我bindService了,那么只有你stopService了而且我也unbindservice了,这个Service才会被结束。四、进程生命周期进程生命周期?Android系统将会尝试保留那些启动了的或者是绑定了服务的进程?如果该服务正在进程的onCreate(),onStart(),或者onDestroy()这些方法中执行时,那么主进程将会成为一个前台进程,以确保此代码不会被停止?如果服务已经开始,那么它的主进程会就重要性而言低于所有可见的进程但高于不可见的进程,由于只有少数几个进程是用户可见的,所以只要不是内存特别低,该服务不会停止.?如果有多个客户端绑定了服务,只要客户端中的一个对于用户是可见的,即认为该服务可见
?
ContentProvider
一、为什么需要ContentProvider为什么需要?为在Android中,每个应用程序都是用自己的userID及在自己的process中执行?当应用程序彼此间要分享数据时,这样的架构势必要提供一个好的解决方案才行?为了解决应用
程序间,彼此要分享数据的需求,Android提供了ContentProvider这个机制。二、使用ContentProvider使用?每一种ContentProvider都提供一个唯一公共URI(由ContentURI封装),它将被客户端用于从内容提供器请求/添加/更新/删除数据。–android.provider.Contacts.Phones.CONTENT_URI–android.provider.Contacts.Photos.CONTENT_URI–android.provider.CallLog.Calls.CONTENT_URI–android.provider.Calendar.CONTENT_URI?URI有2种形式:一是指出该类型数据的所有值(例如所有个人通讯录),二是指出该类型数据的特定记录(例如某一个人的联系信息)–content://contacts/people/从设备返回通讯录列表–content://contacts/people/2返回通讯录中ID=2的单行记录
importandroid.provider.Contacts.People;importandroid.content.ContentUris;importandroid.net.Uri;importandroid.database.Cursor;//生成contentURIUrimyPerson=ContentUris.withAppendedId(People.CONTENT_URI,2);//生成contentURIUrimyPerson=Uri.withAppendedPath(People.CONTENT_URI,“2");//
查询2号记录Cursorcur=managedQuery(myPerson,null,null,null,nu
ll);