編輯:關於Android編程
上幾節,我們學習如何用StartServer啟動一個服務,用bindServer去綁定一個服務,以及服務的生命周期,以及什麼是IntentService。
或許有讀者會發現,我們BindServer中的第二個參數也就是ServiceConnection這個方法在將用bindService時好像沒用到。那本節課就學習。
那我們先說個事,上大學的時候,我學習不好,還是那種經常曠課的同學。長期下去,老師跟前就混的不好了。 有次班裡評選黨員,我就想競爭一下,但是由於我經常不上課的同學,自然幾率就小,所以我就想到走後門。 咋給導員點錢呗,反正導員是貪官,是貪官哪有不貪的。可是我不認識導員啊,那怎麼辦? 但是我捨友那是導員之前的紅人啊,可以通過我捨友把錢給導員,然後讓導員給我整個黨員呗。
大概流程是這樣的:

那我們把這個轉化為代碼:
這個就相當與我們用於一個Activity去啟動一個服務,但是服務有個方法,Activity想用但是卻拿不到,只能通過第三方去幫他拿。
上圖中Activity就是我, 而Seriver就是貪官導員,只有導員能給你一個名額讓你成為黨員,但是你不認識導員,所以就得去找你捨友,也就是導員的親信。
那問題現在轉話為: 我要找我捨友,也就是導員的親信了。
那兩種啟動服務的方式,那種服務當創建後能返回給你這個親信呢? 明顯startService啟動的服務是沒有的。但是bindService啟動服務有:
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
既然分析到,bindService是可以返回到服務的,擔不是服務本身,只是服務的代理而已。
public class MainActivity extends Activity {
private Intent intent;
private MyServiceConn conn;
SheYou me;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this, DangYuanService.class);
conn = new MyServiceConn();
//綁定服務
bindService(intent, conn, BIND_AUTO_CREATE);
}
//我想成為黨員的方法
public void toDoDangyuan(View v)
{
//調用捨友的方法
me.ToBeDangYuan();
}
class MyServiceConn implements ServiceConnection
{
//當服務連接成功後調用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 得到服務的代理
me = (SheYou) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
}
public class DangYuanService extends Service {
@Override
public IBinder onBind(Intent intent) {
//返回服務的代理,也就是貪官導員的親信
return new SheYou();
}
//捨友獨有的能給我辦黨員的方法
class SheYou extends Binder
{
//中間中(捨友)獨有的方法,讓你成為黨員
public void ToBeDangYuan()
{
DangYuan();
}
}
//服務自己的方法,也即是導員的權利
public void DangYuan()
{
Log.i(DangYuanService, 只需1000元就能成為黨員!);
}
}

我當時就想舉報貪官,可是我還想著畢業呢。 就沒舉報貪官。
接著,我們導員還有個嗜好,那就是喝酒,當然了我捨友那必須要參加的。
class SheYou extends Binder
{
//中間中(捨友)獨有的方法,讓你成為黨員
public void ToBeDangYuan()
{
DangYuan();
}
public void HeJiu()
{
Log.i(DangYuanService, 陪導員喝酒!!!!);
}
}
當然了陪導員喝酒,那只有導員的親信才能參加,像我這種級別的人,那是不能參加的。當然也就無權知道了
//我想成為黨員的方法
public void toDoDangyuan(View v)
{
//調用捨友的方法
me.ToBeDangYuan();
me.HeJiu();
}
那現在我訪問喝酒的方法還是ok的。按道理我是無權知道的。 那就不行了。那就對服務修改
這時候我們創建一個專門只有當黨員的借口:
public interface DangYuanInterface {
//只有一個方法,你能知道,那就是黨員的事情
public void ToBeDangYuan();
}
然後讓捨友,也就是中間人,實現這個接口
class SheYou extends Binder implements DangYuanInterface
{
//中間中(捨友)獨有的方法,讓你成為黨員
public void ToBeDangYuan()
{
DangYuan();
}
public void HeJiu()
{
Log.i(DangYuanService, 陪導員喝酒!!!!);
}
}
然後,Activity中定義一個黨員的接口
DangYuanInterface dangyuan;
public void toDoDangyuan(View v)
{
//調用捨友的方法
dangyuan.ToBeDangYuan();
}
class MyServiceConn implements ServiceConnection
{
//當服務連接成功後調用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 得到服務的代理
dangyuan = (DangYuanInterface) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
Android學習之RecyclerView淺析
RecyclerView是android-support-v7-21版本中新增的一個Widget,官方介紹RecyclerView 是 ListView 的升級版本,更加
Android開發技巧之在a標簽或TextView控件中單擊鏈接彈出Activity(自定義動作)
在5.2.1節和5.2.2節介紹了<a>標簽以及TextView自動識別的特殊文本(網址、電話號、Email等),這些都可以通過單擊來觸發不同的動作。雖然這些
android實現好看的自定義提示框
效果圖:代碼部分main_activity.xml MainActivity.java:package com.example.mydialog;impor
Android checkbox的listView具體操作方法
本文主要實現在自定義的ListView布局中加入CheckBox控件,通過判斷用戶是否選中CheckBox來對ListView的選中項進行相應的操作。通過一個Demo來展