今天,我就简单地来介绍一下android项目的文件结构。算是为android的开发学习开一个头:
1. res目录:用于存放Android项目的各种资源文件。(layout:存放界面布局文件;values:存放各种XML格式的资源文件;drawable-ldbi、drawable-mdpi、drawable-hdpi:用于存放小、中、大三种图片文件)
2.src目录:保存java源文件的目录。
3.AndroidManifest.XML文件:android项目的系统清单文件,用于控制android应用的名称、图标、访问权限等整体属性。
4.R.java:这是android项目的自动生成的文件。
应用程序权限说明:通过为<manifest.../>元素添加<uses-permission.../>子元素即可为自身声明权限。
调用应用程序自身所需的权限:在<activity.../>元素添加<uses-permission.../>子元素即可声明调用该程序所需的权限。(权限位于Manifest.permission类)
五大基本组件
1、Activity组件:android应用中负责与用户交互的组件(View组件是所有UI控件、容器控件的基类)多个activity组成Activity栈,当前活动的Activity位于栈顶;
2、Service组件:通常位于后台运行。其拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
3、BroadcastReceiver组件:广播消息接收器。
4、ContentProvider、ContentResolver组件:跨应用的数据交换。ContentProvider提供数据,ContentResolver来访问数据。
5、Intent组件:android应用内不同组件之间通信的载体。(activity、Service、BroadcastReceiver三种组件之间的通信都以Intent为载体)
两套事件处理机制
1、基于监听的事件处理:委派试事件处理方式(普通组件即事件源将整个事件处理委托给特定的对象即事件监听器,当该事件源发生指定的事件时,就通知所委托的事件监听器,有事件监听器来处理这个事件)
2、基于回调的事件处理:通过自定义View来实现,回调事件处理方法都有一个boolean类型的返回值。
先执行监听事件,在执行事件回调方法
响应系统设置更改:Configuration类(专门用于描述手机设备上的配置信息)
Configuration cfg = getResources().getConfiguration();
Handler消息传递机制:让新启动的线程周期性地改变activity里的界面组件的属性。(作用:1.在新启动的线程中发送消息;2.在主线程中获取、处理消息)
Activity详细介绍
ExpandableListActivity:用于显示一个可展开的列表窗口;
PreferenceActivity:用于显示一个显示设置选项参数并进行保存的窗口;
启动其它Activity:1.startActivity(Intent intent);2.startActivityForResult(Intent intent,int requestCode);
关闭Activity:1.finish();2.finish(int requestCode);
使用Bundle在Activity之间交换数据
1.存放数据:1.putExtras(Bundle data);2.putXxx(String key,Xxx data);3.putSerializable(String key, Serializable data)[存放可序列化的对象]
Person p = new Person(name.getText().toString(),passwd.getText().toString(),gender);
//创建一个Bundle对象
Bundle data = new Bundle();
data.putSerializable("person",p);
//创建一个Intent
Intent intent = new Intent(BundleTest.this,ResultActivity.class);
intent.putExtras(data);
2.取出数据:1.getXxx(String key);2.getSerializable(String key,Serializable data)
//获取启动该Result的Intent
Intent intent = getIntent();
//获取该intent所携带的数据
Bundle data = intent.getExtras();
//从Bundle数据包中取出数据
Person p = (Person)data.getSerializable("person");
生命周期
1.活动状态:当前Activity位于前台,用户可见,可以获得焦点;
2.暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点;
3.停止状态:该Activity不可见,失去焦点;
4.销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束;
Intent通信
包含5种属性:
1.Component:接收一个ComponentName对象(需要指定包名和类名)
为Intent设置Component属性:
//创建一个ComponentName对象
ComponentName comp = new ComponentName(ComponentAttr.this,SecondActivity.class);
Intent intent = new Intent();
//为Intent设置Component属性
intent.setComponent(comp);
读取Component属性
ComponentName comp = getIntent().getComponent();
2.Action:Intent所要完成的一个抽象“动作”。(一个Intent对象最多只能包括一个Action属性)
3.Data:向Action属性提供操作的数据。
4.Category:为Action增加额外的附加信息。
5.Extra:通常用于在多个Activity之间进行数据交换。(实质上为Bundle对象)
数据存储
Android的数据存储主要分为以下几个部分
1.SharedPreference:存储应用程序的配置信息。
preference = getSharedPreference("count",MODE_WORLD_READABLE);
//读取数据
int count = preferences.getInt("count",0);
Editor editor = preferences.edit();
//存入数据
editor.putInt("count",++count);
//提交修改
editor.commit();
2.File存储:访问手机存储器上的文件。(类似于Java的IO流)
3.SQLite数据库:大量数据的读写不应使用SQLite数据库来实现。
手势
手势是指用户手指或触摸笔在触摸屏上的连续触碰行为。
数据共享
ContentProvider:类似网站,通过URI向外提供服务;
ContentResolver:类似客户端,通过URI来访问ContentProvider;
URI
content://org.crazyit.providers.dictprovider/words。其中
content://:Android所规定的的
org.crazyit.providers.dictprovider:ContentProvider的authority。
words:资源部分
Service服务组件
Service组件也是可执行的程序,也有生命周期(startService()->onCreate()->onStart()->Service运行中->服务被通知停止->onDestroy())
启动Service:StartService(intent);
关闭Service:StopService(intent);
上述的启动、关闭,Service与访问者(Activity)不存在太多的关联;
如需要进行方法调用或数据交换则要使用bindService()和unbindService()来启动、关闭服务。
生命周期(bindService()->onCreate()->onBind()->客户端与Service交互中->onUnbind()->onDestroy())
BroadcastReceiver接收广播消息
BroadcastReceiver:用于监听系统全局的广播消息。系统监听器——专门负责监听各程序所发出的Broadcast。
网络编程
服务器端利用ServerSocket
ServerSocket ss = new ServerSocket(30000);
while(true)
{
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服务器的新年祝福!\n",getBytes("utf-8"));
os.close();
s.close();
}
android客户端:
Socket socket = new Socket("192.168.1.88",30000);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
string line = br.readLine();
br.close();
socket.close();
授权访问互联网
<user-permission android:name="android.permission.INTERNET" />