Android 从入门到精通

第5章 基本程序单元Activity

它代表手机屏幕中的一屏,在其生命周期中,有一些方法会被系统回调,见下图:

1、创建、配置、启动和关闭Activity

◆创建。一般是继承android.app包中的Activity类,但如果说比如只想实现一个列表,那么可以继承ListActivity。通常情况需要重写onCreate方法,且调用setContentView方法显示视图。

◆配置。需要在AndroidMannifest.xml中添加该Activity。

◆启动。startActivity(intent)

◆关闭。在当前Activity中调用finish()

2、多个Activity的使用

◆使用Bundle在Activity之间交换数据,如:

Intent intent=new Intent (MainActivity.this,RegisterActivity.class);

Bundle bundle=new Bundle();

bundle.putCharSequence("user",user);//user为String类型。

intent.putExtras(bundle);

startActivity(intent);

接收方:

Intent intent=getIntent();

Bundle bundle=intent.getExtras();

String aa=bundle.getString("user");

3、调用另一个Activity并返回结果

使用startActivityForResult(intent,CODE);

可以用这个CODE来进行判断。做相应的处理。

4、使用Fragment

即碎片的意思,使用多个Fragment可以在一个单独的Activity中建立多个UI面板,也可以在多个Activity中重用Fragment。

Activity被暂停或者被销毁时,Fragment也被暂停或销毁,但是当Activity在运行时,可以单独的对每一个Fragment进行操作,如添加或删除。

◆创建Fragment

必须创建一个Fragment的子类,或者继承自另一个已经存在的Fragment的子类,并重载onCreateView方法。

◆在Activity中添加Fragment

一种方法是直接在布局文件中添加,另一种是在运行的时候将其添加进Activity的布局中。

为了让程序支持横屏和竖屏需要创建两个布局文件??这个难度就有点大,多余多屏情况,工作量很大。

此处有两个例子,其代码下一次一定要仔细看下。


第6章 Android应用核心Intent

1、Intent包含组件名称、动作、数据、种类、额外和标记等内容。

◆组件名称。由类名和包名组成。可以用setComponet进行设置,用getComponent方法读取。

◆动作。目标组件包括Activity和Broadcast这两类。

标准Activity动作,有ACTION_MAIN(作为初始的Activity启动,没有数据输入/输出) ACTION_EDIT (将数据显示给用户用于编辑)等。

Broadcast 动作 有ACTION_TIME_TICK(每分钟通知一次当前时间改变)

可以使用setAction方法设置动作,可以用getAction方法读取。

◆数据。Data表示操作数据的URI和MIME类型。不同的动作和不同的数据类型匹配。如动作是ACTION_EDIT的话,那么数据就是包含用来编辑文档的URI.

可以用setDataAndType同时制定数据的URI和MIME类型。

◆种类Category

有CATEGORY_DEFAULT等。方法有addCategory等。

◆额外。可以通过putExtras和getExtras来设置和读取Bundle

◆标记Flags

2、Intent使用

如返回桌面

Intent intent=new Intent();

intent.setAction(intent.ACTION_MAIN);

intent.addCategory(intent.CATEGORY_HOME);

startActivity(intent);

Intent可以分为显示和隐式两类。

其中显示Intent通过组件名称来制定目标组件。而对于隐式则需要使用不同的策略。一般通过Intent过滤器来接收

3、Intent过滤器

一般通过在配置文件中用<intent-filter>来进行设置。

至少包含一个<action>标签,同样包括数据以及种类测试。


第7章 事件处理

通过重载按键事件,以及根据按键码来进行判断和识别的。




第11章 ContentProvider实现数据共享

是不同应用程序之间共享数据的唯一方式

1、使用预定义的Content Provider

通过getContentResolver获取对象,然后用query(URI,固定列...)方法查询,再通过索引进行遍历,获取字段值

在这之前要再AndroidManifest中要添加访问比如联系人记录的权限,uses-pemission。。。

2、自定义 Content Provider

如果自定义Content Provider那么需要完成以下操作:

建立数据存储系统、继承ContentProvider类来提供数据访问方式

在应用程序的AndroidManifest文件中声明Content Provider


第12章  线程与消息处理

对于比较耗时的操作,一般都会开辟一个单独的线程来执行,对UI的操作由主线程执行,子线程要想操作UI必须通过消息处理传递机制Handler来解决这个问题。

1、创建线程

创建线程有两种方法,一种是通过Thread类的构造方法创建线程对象(可以自定义线程类(继承Thread),或者直接在语句中使用创建),并重写run()方法实现,另一种是通过实现Runnable接口实现


2、线程操作

start() sleep(1000)interrupt()

一点语法:Log.i("提示:","中断线程")//第一个参数为Tag 第二个参数为Text

int 转string  String.valueOf(i);

3、Handler消息传递机制

◆循环者Looper

一个线程对应一个Looper对象,而一个Looper对象又对应一个MessageQueue队列,而MessageQueue用于存放Message。可以有多个Handler

要想在子线程中Handler对象,首先要使用Looper类的prepare()方法来初始化一个Looper对象,然后创建Handler对象,从消息队列中获取和处理消息。再使用Looper类的loop()方法启动Looper.

◆Handler的作用

(1)将message或Runnable应用post()或者sendMessage()方法发送到MessageQueue中,当MessageQueue循环到该消息时,则调用相应的handlerMessage方法对齐进行处理

(2)在子线程中与主线程进行通信,也就是与UI线程进行通信。

具体用法:利用实现接口做一个线程,在里面用handler获取,设置,发送消息

在主线程中实例化handler获取以及处理消息,根据信息更新界面。


4、Service应用

Service用于在后台完成用户指定的操作,用户可以使用其他控件来与Service进行通信。可以再后台处理网络事物,播放音乐、执行I/O、进程间通信(IPC)或者与ContentProvider通信。

Started Service

当其它组件如(Activity)调用startService()启动服务,一旦启动,则在后台无限期运行,如果操作完成,服务需要停止自身。

调用方式为:

startService() ->如果是第一次创建则onCreate() 执行一次性建立过程-> onStartCommand()->需要所使用stopSelf()停止自身,或者其它组件调用stopService()

Bound Service

当其它组件调用bindService()方法绑定到服务,多个组件可以绑定到一个服务,当它们都解绑时,服务才被销毁(onDestroy())。

bindService() ->如果是第一次创建则onCreate() 执行一次性建立过程-> onBind()-> 都解绑时系统将其销毁

可以通过Intent来使用这两种服务,可以将服务声明为私有的,从而阻止其它应用程序的访问。


5、创建Started Service

继承IntentService类

在不需要同时处理多个请求的情况下,使用IntentService类来实现服务时非常好的选择,只需要实现onHandleIntent()方法来完成客户端的任务。

继承Service类

如果需要让服务处理多个请求时,就用到它。需要开启新线程来执行任务,每次处理一个请求


6、创建Bound Service

方法有:继承Binder类、使用Messenger、使用AIDL

◆如果服务仅用于本地应用程序并且不跨进程工作,则可以实现自己的Binder类,如客户端与服务位于同一个应用程序和进程。

◆如果需要服务与远程进程通信,则可以使用Messenger来为服务提供接口,该技术允许不使用AIDL执行进程间通信(IPC)

◆如果使用AIDL则需要添加一些东西


7、管理Service的生命周期

见第四条。

服务这一章下次需要好好整一整。


第14章 网络编程及Internet应用

1、使用HttpURLConnection访问网络

需要使用URL的openConnection方法来获得。

◆默认发送get请求,地址?参数名=参数值,使用,分隔。进行传递,传递中文会产生乱码,因此要用Base64编码来解决乱码问题。

若要访问网络资源,还要获取权限。

◆get方式发送的请求值适合发送1024个字节以内的数据,若数据较大时,就要用post方式来提交,此时,需要用setRequestMethod("POST")等其它一些参数。

2、使用HttpClient访问网络

对于简单页面提交可以用HttpURLConnection来搞定,但是对于复杂的联网操作,就需要用Apache组织提供的HttpClient项目来实现。不过它实际上是对原来的访问网络的方法进行了封装。

◆发送get请求

(1)创建HttpClient对象

(2)创建HttpGet对象

(3)如果需要发送请求参数,可以用HttpGet的setParams()方法来添加请求参数。

(4)调用HttpClient对象的execute方法发送请求。返回一个HttpResponse对象

(5)调用HttpResponse的getEntity方法,获得包含响应内容的HttpEntity对象,通过该对象可以获取服务器响应的内容。

◆发送POST请求类似。


3、使用WebView显示网页

安卓提供了内置的浏览器,该浏览器使用了开源的WebKit引擎,可以搜索网址、看电子邮件、播放视频节目等。

◆通过loadUrl方法可以加载指定的网页。

◆loadData方法和loadDataWithBaseURL都可以加载HTML代码。但是前者加载中文时,会乱码,而后者不会。

◆通过getSetting().setJavaScriptEnabled(true)方法可以让JavaScript可用。但若使对话框也可以加载的话还要用setWebChromeClient方法。


数据库

在安卓系统中,集成了一种轻量型的数据库即SQLite,是使用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。

SQLiteOpenHelper类是用来创建数据库的。

SQLiteDatabase类是用来管理数据库的。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值