1、 Android学习(Activity、Service、ContentProvider和BroadcastReceiver四大组件)
1) UI组件:可以在XML文件中加入,也可以在主程序中通过程序进行添加。主要学习了布局管理器、TextView与EditText、AdapterView。
布局管理器:LinearLayout(线性)、TableLayout(几行几列)、FrameLayout(霓虹灯)、RelativeLayout(梅花)、GridLayout(计算器)、
TextView与EditText、:TextView不允许用户编辑,EditText允许用户编辑,在里面可以设置height、width、editable、hint、lines、setText等这几个比较常用的属性
AdapterView:里边包括ListView(以垂直列表形式显示)、Expandable(可展开),ListView对象可以通过setAdapter(Adapter)方法为之提供Adapter,并由Adapter提供列表项。比较常用的Adapter的子类有ArrayAdapter(三个参数)和SimpleAdapter(5个参数),重点是五个参数,进行列表的展示。
2) Android事件处理
基于监听和基于回调的事件处理机制。
基于监听,事件监听器类可以写成内部类(既实现接口又重写方法,将事件监听器类定义成当前类的内部类),外部类(既实现接口又重写方法,将事件监听器类定义成当前类的外部类),Activity本身作为事件监听器类(用的少),直接绑定到标签(直接在XML中绑定Activity中的某个方法),匿名内部类(用的最为广泛,也非常的简便)。因此,基于监听的事件处理,开发者需要掌握事件监听的处理模式以及不同事件对应的监听器接口。基于回调的事件处理更适合应付事件处理比较固定的View,需要掌握不同事件对应的的回调方法。
3) Activity与Fragment
需要在AndroidManifest这个XML文件当中对Activity进行相应的配置。
比较常用的Activity有LauncherActivity(用户单击不同列表项启动不同的Activity)、ExpandableListActivity(重点是四个方法,它的用法同ExpandableListView)、PreferenceActivity(设置相应的参数)、ListActivity。
在AndroidManifest.xml当中配置Activity的属性,包括name、label、intent-filter(里边包括Action、Category等属性)。
通过Intent启动、关闭Activity,new一个Intent对象,参数设置为想要启动的
Activity的名称。
使用Bundle在Activity之间进行数据交换,Bundle能够携带数据。再通过intent.put(bundle);startActivity(intent);把数据带到将要通过Intent对象启动的Activity当中。
Activity的回调机制,自动回调当中的各个方法,类似于servlet生命周期中自动的回调init、destroy()、doget()、dopost()、service()方法。同样Activity生命周期也会回调相应的方法,包括onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()、onDestroy()方法。
Fragment代表了Activity的子模块,可以把Fragment理解为Activity的片段。Fragment也有自己的生命周期,包括onAttach()、onCreate()、onCreateView()onActivityCreate()、onStart()、onResume()、onPause()、onStop()、onDestroyView()、onDestroy()、onAttach()方法。
4) SharedPreferences、File和SQLite数据库
SharedPreferences主要保存类似于配置信息格式的数据,主要是简单的key-value对
File 通过openFileOutput、openFileInput这些IO流访问磁盘上或者SD卡上的内容。
SQLite数据库只是一个文件,可以使用SQL语句对该数据库中的数据表进行增删改查(生词本)。通过SQLiteOpenHelper的子类来获取数据库的连接,获取SQLiteDatabase对象,并利用该对象对数据库进行相应的增删改查操作。
5) ContentProvider(类似于一个网站)和ContetResolver
作为四大组件之一,需要在AndroidManifest当中注册该组件,注册该ContentProvider时需要为它绑定相应的Uri。ContentProvider作用是暴露可供操作的数据,其他应用可以通过ContentResolver来操作ContentProvider所暴露的数据。想要对ContentProvider中的数据进行相应的增删改查需要首先方法当中得到ContentResolver对象,ContentResolver contentResolver=getContentResolver();通过ContentResolver这个对象对ContentProvider当中的数据进行增删改查操作。
对生词本当中的数据进行插入和查询,使用到了SQLite当中的SQLiteOpenHelper的实现类,其实现类的对象调用相应的方法对生词表当中的数据进行增删改查实现,再在本地的MainActivity当中使用ContentResolver对SQLiteOpenHelper当中的数据进行插入和检查,进行具体的操作。
也有对通讯录的访问,对背景图片的访问和设置。
6) Service
作为四大组件之一,当然也需要在AndroidManifest当中对Service进行相应的配置。
与Activitiy的异同:
不同点:Activity用于需要同用户进行交互的地方,需要呈现相应的用户界面。而Service则一直运行在后台,而没有用户界面。
相同点:创建、配置Service与创建配置Activity的过程基本相似(都是用Intent创建Intent对象,在new Intent对象时,在参数当中设置要启动的Activity和Service,之后调用startService(intent)或者startActivity(intent)方法启动相应的Service和Activity)。另外Service和Activity都是从Context派生出来的,都可以调用Context当中的getResource()、getContentResolver()等方法。同样,Service也有自己的生命周期,与Activity对应,Service也有对应的onCreate()、onBind()、onStartCommand()、onUnbind()、onDestroy()方法。
对于Service的启动方式不同,Service的生命周期也会不同(例如startService()方法启动Service,在生命周期中会调用onStartCommand()方法,bindService()方法启动Service,在生命周期当中会调用相应的onBind()和onUnBind()方法)。
IntentService:
Service中可能存在的问题:Service子类当中相应的应用和Service位于同一进程中,而Service不能够处理耗时操作,而IntentService能够处理该问题。对于startService()请求,IntentService会按照顺序处理队列当中的Intent,在处理过程当中会使用新的worker线程处理Intent请求,因此IntentService不会阻塞主线程而可以去处理耗时的操作。
7) BroadcastReceiver
作为四大组件之一,同样需要在AndroidManifest当中对其进行相应的配置。
BroadcastReceiver本质上是一个系统级的全局监听器,它专门负责监听各程序所发出的的Broadcast。
哪个类继承自BroadcastReceiver,哪个类相应的就应该在AndroidManifest这个XML文件当中加入相应的receiver设置。另外,Broadcast分为两种,一种是普通广播,一种是有序广播。普通广播正常的在AndroidManifest当中进行相应的receiver设置即可,而有序广播需要对各个BroadcastReceiver实现类在AndroidManifest的receiver设置当中进行优先级的设定,用来标记各个类接收到Broadcast的先后顺序。同时也可以在高优先级的BroadcastReceiver实现类当中加入abortBroadcast();方法,用该方法组织消息的继续传播,从而使低优先级的BroadcastReceiver接受不到相应的信息。
基于Service的音乐播放器:正常在Activity当中通过bindService()方法可以实现Activity与相应的Service的通信。startService()方法可以启动相应的Service但是不能够实现Activity与Service的通信。这里用到了BroadcastReceiver就可以实现Activity与Service通过startService()方法进行通信,并且实现音乐盒的功能。
这里是在MainActivity当中加入了内部BroadcastReceiver的实现类,在Service当中也加入了BroadcastReceiver的内部实现类,这样Activity就可以接受Service通过sendBroadcast(intent)发出的广播,Service也就可以接受Activity通过startService(intent)发出的广播。同时在Service的主程序中写一个播放完成事件绑定监听器,正常的播放歌曲,一旦某首歌播放完毕,就自动切换歌曲,并触发监听器,该监听器就会向Activity发送信息,Activity收到信息后就会自动更新前台显示的歌曲作者等界面。同时,在Activity当中也用两个按钮播放和停止按钮为其添加监听器,可以让用户主动地进行歌曲的播放和停止。