導航:首頁 > 操作系統 > android廣播注冊的兩種方式

android廣播注冊的兩種方式

發布時間:2022-07-26 12:07:08

android中注冊廣播有幾種方式,這些方式的優缺點,談談android引入廣播的用意

2種方式
1.在androidmainfest.xml中注冊
2.<receiver>
3. <intent-filter>
4. <action android:name = "android.intent.action.PICK"/>
5. </intent-filter>
6.</receiver>
7.缺點:常駐型,占資源比較大
8.
9.registerReceiver(receiver,filter); BroadcastReceiver更新UI一般用這種方法

❷ 安卓在一個類中可以注冊多個廣播嗎

有兩種方式,一種是靜態注冊,就是在manifest文件里配置一下,這種方式注冊的廣播屬於系統級廣播。你的應用沒打開也能收到廣播。比如你要做一個收到某廣播就啟動你的應用的功能可以這樣搞。另一種是動態注冊,在代碼里執行一個rigisterBroadcastReciver(可能拼寫有誤)的方法。這種你要自己作好反注冊。這種廣播可以做成你的應用啟動後才監聽,關閉後就不監聽的效果。

回答不容易,希望能幫到您,滿意請幫忙採納一下,謝謝

❸ Broadcast注冊方式與區別

Broadcast廣播,注冊方式主要有兩種

第一種是靜態注冊,也可成為常駐型廣播,這種廣播需要在Androidmanifest.xml中進行注冊,這中方式注冊的廣播,不受頁面生命周期的影響,即使退出了頁面,也可以收到廣播這種廣播一般用於想開機自啟動啊等等,由於這種注冊的方式的廣播是常駐型廣播,所以會佔用CPU的資源。

第二種是動態注冊,而動態注冊的話,是在代碼中注冊的,這種注冊方式也叫非常駐型廣播,收到生命周期的影響,退出頁面後,就不會收到廣播,我們通常運用在更新UI方面。這種注冊方式優先順序較高。最後需要解綁,否會會內存泄露
廣播是分為有序廣播和無序廣播。

❹ android 注冊的靜態廣播和動態廣播的區別

1.動態注冊廣播不是常駐型廣播,也就是說廣播跟隨activity的生命周期。注意: 在activity結束前,移除廣播接收器。
靜態注冊是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。
它的生命周期為從回調onReceive()方法開始到該方法返回結果後結束。
2.當廣播為有序廣播時:
1 優先順序高的先接收
2 同優先順序的廣播接收器,動態優先於靜態
3 同優先順序的同類廣播接收器,靜態:先掃描的優先於後掃描的,動態:先注冊的優先於後注冊的。

❺ android 注冊廣播有幾種方式,這些方式有何優缺點

有兩種注冊廣播方式:
1.常駐型廣播
常駐型廣播,當應用程序關閉了,如果有廣播信息來,寫的廣播接收器同樣的能接收到,它的注冊方式就是在應用程序的AndroidManifast.xml 中進行注冊,這種注冊方式通常又被稱作靜態注冊。這種方式可以理解為通過清單文件注冊的廣播是交給操作系統去處理的。示例代碼如下:
AndroidManifest.xml中配置廣播

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="spl.broadCastReceiver"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BroadCastReceiverActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!--廣播注冊、name裡面填寫廣播類的路徑-->
<receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

</application>

<uses-sdk android:minSdkVersion="7" />

<!-- 許可權申請 -->
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

</manifest>

2.非常駐型廣播
非常駐型廣播,當應用程序結束了,廣播自然就沒有了,比如在 Activity 中的 onCreate 或者 onResume 中注冊廣播接收者,在 onDestory 中注銷廣播接收者。這樣廣播接收者就一個非常駐型的了,這種注冊方式也叫動態注冊。這種方式可以理解為通過代碼注冊的廣播是和注冊者關聯在一起的。比如寫一個監聽 SDcard 狀態的廣播接收者:
package cn.sunzn.mosecurity.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Environment;

public class SDcard extends Activity {
SdcardStateChanageReceiver sdcardStateReceiver;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sdcardStateReceiver = new SdcardStateChanageReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addDataScheme("file");
registerReceiver(sdcardStateReceiver, filter);
}

protected void onDestroy() {
unregisterReceiver(sdcardStateReceiver);
}

class SdcardStateChanageReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
checkSDCard();
}

public void checkSDCard() {
String state = Environment.getExternalStorageState();
System.out.println(state);
if (state.equals(Environment.MEDIA_REMOVED) || state.equals(Environment.MEDIA_UNMOUNTED)) {
System.out.println("SDCard 已卸載!");
}
}
}
}

❻ android 注冊廣播時內容溢出怎麼解決

什麼是廣播?
在Android中,Broadcast是一種廣泛運用的在應用程序之間傳輸信息的機制。我們拿廣播電台來做個比方。我們平常使用收音機收音是這樣的:許許多多不同的廣播電台通過特定的頻率來發送他們的內容,而我們用戶只需要將頻率調成和廣播電台的一樣就可以收聽他們的內容了。Android中的廣播機制就和這個差不多的道理。
電台發送的內容是語音,而在Android中我們要發送的廣播內容是一個Intent。這個Intent中可以攜帶我們要傳送的數據。
電台通過大功率的發射器發送內容,而在Android中則是通過sendBroadcast這個方法來發送(很形象的名字吧)。
用戶通過調整到具體的電台頻率接受電台的內容。而在Android中要接受廣播中的內容則是通過注冊一個BroadCastReceiver來接收的。只有發送廣播的action和接收廣播的action相同,接受者才能接受這個廣播。

廣播有什麼用
其實,在什麼是廣播的第一句就已經說明了廣播有什麼用了。對了,籠統一點講就是用來傳輸數據的。具體一點說就是:
1.實現了不同的程序之間的數據傳輸與共享,因為只要是和發送廣播的action相同的接受者都能接受這個廣播。典型的應用就是android自帶的簡訊,電話等等廣播,只要我們實現了他們的action的廣播,那麼我們就能接收他們的數據了,以便做出一些處理。比如說攔截系統簡訊,攔截騷擾電話等等
2.起到了一個通知的作用,比如在service中要通知主程序,更新主程序的UI等。因為service是沒有界面的,所以不能直接獲得主程序中的控制項,這樣我們就只能在主程序中實現一個廣播接受者專門用來接受service發過來的數據和通知了。

Android廣播機制包含三個基本要素:
廣播(Broadcast)----- 用於發送廣播。
廣播接收器(BroadcastReceiver)----- 用於接收廣播。
意圖內容(Intent)----- 用於保存廣播相關信息的媒介。

Broadcast是一種廣泛應用的在應用程序之間傳輸信息的機制。而BroadcastReceiver是對發出來的Broadcast進行過濾接受並響應的組件。

下面對廣播的過程進行詳細的描述:
首先在需要發送信息的地方,把要發送的信息和用於過濾的信息(如Action、Category)裝入一個Intent對象,然後通過調用Context.sendBroadcast()、Context.sendOrderBroadcast()或Context.sendstickyBroadcast()方法,把Intent對象以廣播的方式發出去。
當Intent發送以後,所有已經注冊的BroadcastReceiver會檢查注冊時的Intentfilter是否與發送的Intent相匹配,若匹配就會調用BroadcastReceiver的void onReceive(Context curContext, Intent broadcastMsg)方法。

廣播的生命周期:
廣播接收器僅在它執行這個方法時處於活躍狀態。當onRecever()返回後,它就變為失活狀態。
擁有一個活躍狀態的廣播接收器的進程被保護起來不會被殺死,但僅擁有失活狀態組件的進程則會在其他進程需要它所佔用的內存時被殺死。所以,如果響應一個廣播信息需要很長一段時間,我們一般會將其納入一個衍生的線程中去完成,而不是在主線程中去完成它,從而保證用戶交互過程的流暢性。

注冊BroadcastReceiver的兩種方法:
方式一,靜態的在AndroidManifest.xml中用<receiver>標簽聲明注冊,並在標簽內用<intent-filter>標簽注冊過濾器。
方式二,動態地在代碼中先定義並設置好一個IntentFilter對象,然後在需要注冊的地方調用Context.registerReceiver()方法,如果取消時就調用Context.unregisterReceiver()方法。如果用動態方式注冊的BroadcastReceiver的Context對象被銷毀時,BroadcastReceiver也就自動取消注冊了。
另外,若在使用sendBroadcast()的方法是指定了接收許可權,則只有在AndroidManifest.xml中用<uses-permission>標簽聲明了擁有此許可權的BroadcastReceiver才會有可能接收到發送來的Broadcast。同樣,若在注冊BroadcastReceiver時指定了可接收的Broadcast的許可權,則只有在保內的AndroidManifest.xml中用<uses-permission>標簽聲明了,擁有此許可權的Context對象所發送的Broadcast才能被這個BroadcastReceiver接收。
動態注冊:
IntentFilter intentFilter = new IntentFilter();
intentFilter.add(Action); //為BroadcastReceiver指定action,使之用於接收同action的廣播。
registerReceiver(BroadcastReceiver, intentFilter);
一般在onStart()中注冊,onStop()中取消。指定廣播目標Action:Intent intent = new Intent(action--String),指定了此action的receiver會接收此廣播。

這里用一個實例來看一下如何處理廣播事件
我們按照如下步驟來實現:
1、創建一個類繼承BroadcastReceiver類,復寫onReceive()方法
2、在AndroidManifest.xml文件中注冊BroadcastReceiver
3、構建Intent對象
4、調用sendBroadCast()方法發送廣播

❼ Android開發中廣播的作用及注冊方式,

廣播是一種運用的在應用程序之間傳輸信息的機制。而BroadcastReceiver 是對發送出來的Broadcast進行過濾接受並響應的一類組件。廣播既可以在清單文件AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。只要是注冊了,當事件來臨的時候,即使程序沒有啟動,系統也在需要的時候啟動程序。

❽ 注冊廣播有幾種方式,這些方式有何優缺點

BroadcastReceiver用於監聽被廣播的事件
必須被注冊,有兩種方法:
1、在應用程序的代碼中注冊
注冊BroadcastReceiver:
registerReceiver(receiver,filter);
取消注冊BroadcastReceiver:
unregisterReceiver(receiver);
當BroadcastReceiver更新UI,通常會使用這樣的方法注冊。啟動Activity時候注冊BroadcastReceiver,Activity不可見時候,取消注冊。
2、在androidmanifest.xml當中注冊
<receiver>
<intent-filter>
<action android:name = "android.intent.action.PICK"/>
</intent-filter>
</receiver>
1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。
2)第二種是常駐型,也就是說當應用程序關閉後,如果有信息廣播來,程序也會被系統調用自動運行。

使用這樣的方法注冊弊端:它會始終處於活動狀態,畢竟是手機開發,cpu和電源資源比較少,一直處於活動耗費大,不利。

❾ 注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。

android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現在Manifest的application中添加:上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統啟動完成),如果要自己發送一個廣播,在代碼中為:
Intent i = new Intent(「android.intent.action.BOOT_COMPLETED」);
sendBroadcast(i);
這樣,廣播就發出去了,然後是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然後得寫onReceive方法,實現如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(「android.intent.action.BOOT_COMPLETED」)) {
//Do something
}
}
};
第二種方式,直接在代碼中實現,但需要手動注冊注銷,實現如下:
IntentFilter filter = new IntentFilter();
filter.addAction(「android.intent.action.BOOT_COMPLETED」);
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然後同樣用上面的方法以重寫onReceiver,
最後在程序的onDestroy中要注銷廣播,實現如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}

❿ 12、注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。

  1. 注冊廣播的分類:靜態注冊和動態注冊。

    靜態注冊:在清單文件里直接注冊,從app開啟到app銷毀,一直在接收廣播,接收廣播時間長,但是接收廣播的優先順序低於動態注冊廣播。

    動態注冊:動態注冊,動態銷毀,從onCreate到取消注冊,期間接收廣播,接收廣播時間是短且可控,接收廣播的優先順序高。例如:

    發送廣播:
    Intent i = new Intent();
    i.setAction("ACTION_CLOSE");
    sendBroadcast(i);

    接受廣播:
    onCreate(){

    //注冊廣播的接受者
    IntentFilter filter = new IntentFilter();
    filter.addAction("ACTION_CLOSE_ACTIVITY");
    receiver = new InnerReceiver();
    registerReceiver(receiver, filter);
    }

    private class InnerReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    //TODO 當前Activity接收到廣播 需要做的事情
    }
    }
    }

    //注銷廣播

    @Override
    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(receiver);
    }


2.引入廣播的原因:

a) 不同的app之間傳信通用

b)發出一條指定,需要多個Activity都需要有反應


注意:以上僅供參考,如有疑問,請追問,謝謝。

閱讀全文

與android廣播注冊的兩種方式相關的資料

熱點內容
京東java演算法筆試題 瀏覽:174
柱子加密箍筋不準有接頭 瀏覽:197
我的世界伺服器菜單插件如何使用 瀏覽:12
劉毅10000詞pdf 瀏覽:890
剛畢業的程序員會什麼 瀏覽:974
單片機控制64路開關量 瀏覽:982
win10截圖編程 瀏覽:420
怎樣把名字變成文件夾 瀏覽:203
文件怎麼搞成文件夾 瀏覽:730
多線程編程php 瀏覽:606
安卓機越用越卡有什麼辦法 瀏覽:17
高中生解壓操場適合做的游戲 瀏覽:395
程序員java招聘 瀏覽:462
未來之光手機雲伺服器 瀏覽:160
伺服器下載資料為什麼c盤滿了 瀏覽:265
怎麼清除空文件夾 瀏覽:544
如何查看派派伺服器 瀏覽:804
殺手6解壓畫面 瀏覽:671
誇張程序員 瀏覽:469
如何直播切兩個APP畫面 瀏覽:786