Android 四大組件之service與Broadcast

來源:互聯網
上載者:User

標籤:

Android 四大組件之一:service:

Service有五個生命週期:onCreat,onStartCommand, onBind,onUnbind, onDestroy

主要有綁定和非綁定兩種方式

首相在Activity中設定四個Button,用於測試綁定和非綁定兩種方式,按下Button播放音樂,停止音樂,非綁定用StopService停止,綁定方式用Bind Service啟動,解除綁定用unbindService停止。
非綁定:Intent intent=new Intent(MainActivity.this,MyService.class);
start Service(intent);/stopSercice(intent)
從Activity啟動service主要用上述代碼,
 
綁定:Intentintent=newIntent(MainActivity.this,MyService.class);
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
serviceConnection為:
private ServiceConnection serviceConnection=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name,
                                   IBinder service) {
     myService=((MyService.MyBinder)service).getService();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};
綁定寫法為固定寫法
在Service中還可以使用函數回調的方式來進行某些操作
函數回調一般有四個步驟:
1. 定義一個借口,借口裡定義一個方法
2. Activity中實現這個借口,和借口裡的方法
3.Service中定義public static void setMusicStop(Context context){
    stopImg = (StopImg) context;
}
4.在Activity中傳入範圍就能夠調用Service中的方法。
函數回調一般分為這四個步驟。
函數回調不僅用於Activity與Service中,還可以用於Activity與Activity中。
音樂播放器中一般用到函數回調。
 
 
Broadcast:廣播
註冊方法非為靜態、動態兩種方式
靜態即在資訊清單檔中手動註冊
<receiver
    android:name=".Broadcast.MySMS"
    android:enabled="true"
    android:exported="true"
>
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
其中的android:name="android.provider.Telephony.SMS_RECEIVED"
為自己定義的名稱
 
動態註冊:
//動態註冊廣播
IntentFilter intent Filter=new IntentFilter();
intentFilter.addAction("android.jredu.action.WEN");
registerReceiver(new MyactiveBroad(),intentFilter);
 
 
 
public class MyactiveBroad extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        String arg2 = intent.getStringExtra("arg2");
        Log.d("===========接受======",arg2);
    }
}
廣播註冊完成後,還要下一個繼承BroadcastReceiver的方法,用於接收廣播的內容,想要在哪接收廣播,就要在哪註冊廣播。
 
下面寫一個廣播的測試程式來說明:用到之前說的Service
 
首先,建立一個Activity1,設定兩個Button,                              
一個測試靜態註冊,一個用於跳轉測試動態註冊。
再建立一個Service,靜態註冊,
 
 
在Service資訊清單檔中,加入
<receiver
    android:name=".Broadcast.MyReceiver"
    android:enabled="true"
    android:exported="true"
>
    <intent-filter>
        <action android:name="android.jredu.broadcast.ZHANG" />
    </intent-filter>
</receiver>
這就靜態註冊了一個廣播,廣播的name為
<action android:name="android.jredu.broadcast.ZHANG" />
再建立一個Activity2,測試動態發送。
 
 
下為Activity1的內容
public class BroadcastActivity extends AppCompatActivity {
    private Button bt1,bt2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast);
        bt1= (Button) findViewById(R.id.bt1);
        bt2= (Button) findViewById(R.id.bt2);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("arg","你好");
                intent.setAction("android.jredu.broadcast.ZHANG");
                sendBroadcast(intent);
            }
        });
        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(getBaseContext(),BroadActivity.class);
                startActivity(intent);
            }
        });
        //動態註冊廣播
       
IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("android.jredu.action.WEN");
        registerReceiver(new MyactiveBroad(),intentFilter);

    }
    public class MyactiveBroad extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            String arg2 = intent.getStringExtra("arg2");
            Log.d("===========接受======",arg2);
        }
    }
}
 
下為Activity2的內容:中有一個Button,按下發送廣播
public class BroadActivity extends AppCompatActivity {
    private Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broad);
        bt1= (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("arg2","42870");
                intent.setAction("android.jredu.action.WEN");
                sendBroadcast(intent);
            }
        });
    }
}

Android 四大組件之service與Broadcast

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.