接触Android开发已经有一年多了,回过头来,发现原来以前学习的最基础的Android知识很多已经遗忘了。现在开始回顾最基础的Android知识。
Android最基础的莫过于四大组件了:
一 、Activity
Activity可以说是Android中最常见的组件了。Activity通常就是一个单独的屏幕,他上面可以添加一些控件,也可以监听并响应一些用户事件。
Activity之间是通过Intent进行通信和切换的,Intent主要部分是动作和动作对应的数据。
对屏幕的布局有两种方式:
1、XML布局。XML布局可以说是最直接的布局方式了,通过在资源文件夹的layout目录下添加对于activity的布局文件来实现的。在对应的activity中的onCreate()方法中调用方法setContentView(R.layout.xxx)来实现。这种方法可以说是很方便、直观的,你可以很容易的对屏幕显示进行布局,有时你甚至可以通过拖控件的方式进行布局,但是这种方式不够灵活,一旦生成,想在代码中更改布局是很困难的。
2、代码中动态添加。这种方式很灵活,但有些繁琐。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
final LinearLayout layout2=new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL);
Button btn1=new Button(this);
setContentView(layout2);
Button btn2=new Button(this);
btn1.setText("Button1");
Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源
Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听
public void onClick(View v) {
Log.i("Button","你点击的Btn1");
}
});
虽然有两种方式布局,其实我们可以合并起来一起用。
对Button的onClick事件有三种写法
1.直接设置对应的点击事件:
Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源
Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听
public void onClick(View v) {
Log.i("Button","你点击的Btn1");
}
});
2.设置对Button设置监听,在监听中判断点击的对象,进行响应:
Button Btn1 = (Button) findViewById(R.id.button1);//获取按钮资源
Btn1.setOnClickListener(listener);//设置监听
Button.OnClickListener listener = new Button.OnClickListener(){//创建监听对象
public void onClick(View v){
if(v == Btn1)
Log.i("Button","你点击的Btn1");
}
};
3.在XML文件中添加onClick事件,该方法在Android1.6以后可以用:
android:onClick="Btn1OnClick"
public void Btn1OnClick(View view){
Log.i("Button","你点击的Btn1");
}
前两种方式代码多,而且繁琐,推荐使用第三种方式。
二、BroadcastReceive
你可以使用BroadcastReceiver来让你的应用对一个外部的事件做出响应。
BroadcastReceivers不能显示UI,它只能通过NotificationManager 来通知用户这些事情发生了。BroadcastReceivers既可以在AndroidManifest.xml 中注册,也可以在代码中使用Context.registerReceiver()进行注册。
1.静态注册
<receiver android:name=".SMSBroadcastReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver >
2.动态注册
IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mBatteryInfoReceiver ,intentFilter);
事情发生时,你的应用不必对请求调用BroadcastReceiver,系统会在需要的时候启动你的应用,并在必要情况下触发BroadcastReceiver。
三、Service
一个服务是具有一段较长生命周期且没有用户界面的程序。
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个活动,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的活动,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个活动会使用Context.startService() 来启动一个服务,从而可以在后台保持音乐的播放。同时,系统也将保持这个服务一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService() 方法,连接到一个服务上(如果这个服务还没有运行将启动它)。当连接到一个服务之后,我们还可以通过服务提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
四、Content Providers
应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider供将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。
写的很匆忙,不足之处请谅解!