bindService筆記

此文是自己學(xué)習(xí)bindService的筆記
模擬一個(gè)進(jìn)度條

先貼代碼

定義接口搏恤, 需要和Activity傳遞數(shù)據(jù)
public interface  IService {   
  int getProgress();
}
定義服務(wù)
public class MyService extends Service implements IService {    
    MyBinder myBinder = new MyBinder();    ;  
    private int progress;    
   class MyBinder extends Binder implements IService {        
      @Override       
     public int getProgress() {        
      return progress;      
      }  
    }    
@Override    
public IBinder onBind(Intent intent) {        
    return myBinder;     
  }    
    @Override    
   public void onCreate() {      
       super.onCreate();       
       new Thread() {            
           @Override           
           public void run() {                
              super.run();               
                while (true) {                    
                    try {                        
                      Thread.sleep(100);                   
                    } catch (InterruptedException e) {                        
                       e.printStackTrace();                    
                    }                   
                   progress++;                    
                   updateView();               //更新數(shù)據(jù)毁嗦,通知Activity刷新宫补, 此處通過Handler進(jìn)行通知
                 }            
              }        
         }.start();    
   }   
   private void updateView() {       
        MainActivity.getMyHandler().sendEmptyMessage(1);    
   }    
   @Override    
   public int onStartCommand(Intent intent, int flags, int startId) {        
       return super.onStartCommand(intent, flags, Service.START_REDELIVER_INTENT);    
   }    
   @Override    
   public void onDestroy() {
           super.onDestroy();   
   }
    @Override    
   public boolean onUnbind(Intent intent) {       
       return super.onUnbind(intent);  
   }    
   @Override    
   public int getProgress() {        
      return progress;    
   }
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button mOpen, mClose;
    static ProgressBar myProgress;
    static IService mIservice;
    int i = 0;
    static MyHandle mmyhandler;
    MyService.MyBinder mMyBinder;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mOpen = (Button) findViewById(R.id.open);
        mOpen.setOnClickListener(this);
        mClose = (Button) findViewById(R.id.close);
        mClose.setOnClickListener(this);
        myProgress = (ProgressBar) findViewById(R.id.pb);
        mmyhandler = MyHandle.getInstance();

    }

    public ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mIservice = (IService) service; //通過BindService      使mServiceConnection和MyService有連聯(lián)系  此處 service==MyBinder 因?yàn)閙MyBinder實(shí)現(xiàn)了IService接口 所以可以強(qiáng)行轉(zhuǎn)換為IService尸曼,并且也就獲得了IServiced的實(shí)現(xiàn)。
           // mMyBinder= (MyService.MyBinder) service;
            Toast.makeText(MainActivity.this, "連接成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {  //此方法是Service異常銷毀時(shí)候才會(huì)調(diào)用的
            Toast.makeText(MainActivity.this, "斷開連接", Toast.LENGTH_SHORT).show();
            mServiceConnection = null;

        }
    };

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.open:
                Intent it = new Intent(this, MyService.class);
                bindService(it, mServiceConnection, Service.BIND_AUTO_CREATE);
                break;
            case R.id.close:
                unbindService(mServiceConnection);
                break;
            default:
                break;
        }
    }
 
public static MyHandle getMyHandler() {   //靜態(tài)方法,為Service和Activity獲取同一個(gè)Hanlder
        return mmyhandler;
    }
    public static class MyHandle extends Handler {  //使用單例模式

        private static MyHandle myHandler;        

        public static MyHandle getInstance() { 
            if (myHandler == null) {
                myHandler = new MyHandle();
            }
            return myHandler;
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                myProgress.setProgress(mIservice.getProgress());
            }
        }
    }
XML
    
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:orientation="vertical"
    tools:context="com.example.administrator.bindservice.MainActivity">

    <ProgressBar
        android:id="@+id/pb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="0"
        style="?android:attr/progressBarStyleHorizontal"
        />
    <Button
        android:id="@+id/open"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/open" />

    <Button
        android:id="@+id/close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/close" />
</LinearLayout>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末速蕊,一起剝皮案震驚了整個(gè)濱河市途乃,隨后出現(xiàn)的幾起案子俩功,更是在濱河造成了極大的恐慌幻枉,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诡蜓,死亡現(xiàn)場(chǎng)離奇詭異熬甫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)万牺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門罗珍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脚粟,你說我怎么就攤上這事覆旱。” “怎么了核无?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵扣唱,是天一觀的道長。 經(jīng)常有香客問我团南,道長噪沙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任吐根,我火速辦了婚禮正歼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拷橘。我一直安慰自己局义,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布冗疮。 她就那樣靜靜地躺著萄唇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪术幔。 梳的紋絲不亂的頭發(fā)上另萤,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音诅挑,去河邊找鬼四敞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拔妥,可吹牛的內(nèi)容都是我干的忿危。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼毒嫡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兜畸,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤努释,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咬摇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伐蒂,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肛鹏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逸邦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡在扰,死狀恐怖缕减,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芒珠,我是刑警寧澤桥狡,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站皱卓,受9級(jí)特大地震影響裹芝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娜汁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一嫂易、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掐禁,春花似錦怜械、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至享完,卻和暖如春灼芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背般又。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工彼绷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茴迁。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓寄悯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堕义。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猜旬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 不管是藥物設(shè)計(jì)還是分子模擬洒擦,蛋白的結(jié)構(gòu)是必須的椿争,結(jié)構(gòu)的好壞直接影響后期實(shí)驗(yàn)的可信程度。雖然許多蛋白晶體結(jié)構(gòu)已被解析...
    生信雜談閱讀 11,656評(píng)論 0 10
  • 這是一款付費(fèi)語音回答平臺(tái)---“分答“號(hào)稱“你睡了,你的問題還在為你賺錢掸茅。它一款探索知識(shí)共享椅邓,知識(shí)變現(xiàn)的產(chǎn)品。...
    Ameizeng閱讀 225評(píng)論 0 1
  • 1.變量的定義 可以使用var定義變量昧狮,變量如果沒有賦值景馁,那變量的初始值為undefined 2.變量作用域 變量...
    sakatayui醬閱讀 344評(píng)論 0 5