Android复习

来源:互联网 发布:网速测试软件 编辑:程序博客网 时间:2024/06/06 04:08
AndroidUI
   Android的UI组件被称为View
   布局有四种:
       LinearLayout,RelativeLayout,TableLayout,FrameLayout


   控件


特有属性:
   LinearLayout特有属性android:orientation
   (TableLayout其实也有)
   RelativeLayout特有属性
相对其他控件,取值是相对控件的id
layout_toRightOf
layout_below
layout_toLeftOf
layout_above


相对其他控件的边线对齐,取值是相对控件的id
layout_alignBaseline
layout_alignLeft
layout_alignTop
layout_alignRight
layout_alignBottom


相对父容器的某个位置,取值是true/false
layout_centerInParent
layout_centerHorizontal
layout_centerVertical
layout_alignParentLeft
layout_alignParentTop
layout_alignParentRight
layout_alignParentBottom
    TableLayout的特有属性:
android:stretchColumns//拉伸
android:shrinkColumns//收缩
    EditText等允许输入的控件都具备一个属性hint默认提示


   onDraw方法是所有View的绘制方法,这个方法只会在创建View的时候调用,如果要重新绘制,那么必须invalidate强制摧毁


   Adapter适配器
  1.有几种适配器
ArrayAdapter//ArrayAdapter只支持单数据显示(每个数据项只有一条数据)
SimpleAdapter//SimpleAdapter可以让每个数据项显示多种数据
SimpleCursorAdapter//SimpleCursorAdapter是用于将数据库查询结果和适配器绑定
自定义Adapter//BaseAdapter是一个抽象类,我们需要实现其中的方法来定义适配器
getCount方法决定数据项的总数
//getItem是当你通过适配器的getItem方法会调用的方法
//是一个主动方法,就是需要手动调用的方法
//getItemId和getItem是一样的,主动方法


//getView是被动方法,自动调用
//当要显示ListView中每项数据的时候会调用getView
//以便获取当前项到底显示什么
//View就是项,getView是核心方法


//小结:
 //在Android中如果查找控件:findViewById 
//在Android中如果查找资源,比如图片:getResources().getXxxx 
//在Android中如果查找布局:LayoutInflater.from(content).inflate


  2.自定义适配器要实现哪几个方法
自定义的Adapter继承至BaseAdapter
int getCount()
Object getItem(int)
long getItemId(int)
View getView(int,View,ViewGroup)
getView方法用于返回每个数据项的视图,是最关键的方法
getCount将决定数据项的总数




小结:其实AndroidUI这块基本上问题集中在以下几个方面:
1.控件  特有属性
2.onDraw方法   是谁的,view,什么时候调用,如何重新调用
3.Adapter  有几种,自定义的要实现哪几个方法,那几个方法分别有什么作用


Android网络:
1.网络数据交互的方法  http协议 HttpURLConnection
2.连接的方法有哪些
   HttpURLConnection
   HttpClient
   Socket
3.怎么接收和处理xml或json格式的数据


4.AsyncTask的使用//异步任务类
  a.有哪几个方法构成  三个方法,那个三个方法的特点和调用过程
onPostExecute    doInBackground     
  b.AsyncTask的优点   解决了UI线程和非UI线程之间调度的问题


* onPreExecute(), 该方法将在执行实际的后台操作前被UI 线程调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这个方法可以不用实现。
       
* doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台处理工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
      
* onProgressUpdate(Progress...),在publishProgress方法被调用后,UI 线程将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
      
* onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI 线程调用,后台的计算结果将通过该方法传递到UI 线程,并且在界面上展示给用户.
      
* onCancelled(),在用户取消线程操作的时候调用。在主线程中调用onCancelled()的时候调用。
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
      1) Task的实例必须在UI 线程中创建
      2) execute方法必须在UI 线程中调用
      3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。
      4) 该task只能被执行一次,否则多次调用时将会出现异常
      doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。




Android组件
1.有几个组件   四个
2.哪四个组件  Activity活动 Service服务 Broadcast广播 ContentProvider内容提供者


3.Intent是不是组件,不是,那Intent是什么 
Intent是组件之间的粘合剂,服务的启动,广播的发送,Activity的切换都需要通过Intent
另外Intent还可以在组件之间充当数据传递的媒介
4.那么IntentFilter和Intent有什么关系
Intent用于启动组件或是传递数据
而IntentFilter是用于命别名,以便外部程序访问,比如为Activity命名,又比如为广播起名
另外IntentFilter还可以将多个不同的Activity归类为一组,在进行某一动作的时候由用户在这一组中自行选择启动的Activity
5.Activity的生命周期
6.Activity的横竖屏切换时的生命周期
Activity生命周期分为:
完整生命周期(Activity创建到销毁)
onCreate----onDestroy
可视生命周期(Activity可见到不可见)
onStart----onStop
前台生命周期(Activity可操作到不可操作)
onResume---onPause


正常情况下启动一个Activity会经历以下方法:
onCreate-->onStart-->onResume
当按back结束的时候:
onPause-->onStop-->onDestroy


如果是其他Activity覆盖了当前的Activity
比如来了电话,那么电话界面会强制覆盖当前的Activity
或者当按下Home键的时候
那么:
onPause-->onStop
如果在一段时间之内重新返回到这个Activity
那么:
onRestart-->onStart-->onResume


onDestroy是不靠谱的,所以千万不要将onDestroy作为程序的边界
那么程序边界设置为onStop可以么?


在传统程序中,比如桌面程序(Swing),web程序(JSP/Servlet)中,对话框是同步的
就是对话框出现后,会导致后续代码停止运行,等待对话框关闭后才继续执行
而Android中的对话框是异步的
简单的说:Android的对话框show出来后,后面的代码继续执行


如果在Android中要实现同步对话框,请选择Activity模拟


onPause是当前Activity失去用户操作时最后一个肯定会被调用的方法,而后面的onStop以及onDestroy则不一定会触发
所以onPause是实际意义上程序的边界


而启动Activity最后的一个步骤是调用onResume




Android的横竖屏切换比我们想像中要复杂的多
它的切换是依靠摧毁,重新创建来实现
所以当切换横竖屏的时候会经历以下方法:
onPause-->onStop-->onDestroy-->onCreate-->onStart-->onResume
那么在这个过程中,程序的运行数据和状态会因为onDestroy的调用丢失,也会因为onCreate的调用而重置
所以Activity还提供了2个专门解决这个问题的方法:
onSaveInstanceState
onRestoreInstanceState
调用的流程是:当切换横竖屏的时候
onPause-->onSaveInstanceState-->onStop-->onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume


7.Service的生命周期(启动和绑定服务)
8.Broadcast(如何拦截短信,描述流程)
9.ContentProvider






Android存储
1.什么时候用什么样的存储方式
  a.文件                 外部提供的数据或临时数据
  b.sqlite               数据关系复杂或数据量大
  c.SharedPreferences    数据量少
2.sqlite的操作
3.assets和raw目录存放的文件有什么差异
0 0