當前位置:首頁 » 安卓系統 » stickyandroid

stickyandroid

發布時間: 2022-08-08 10:23:48

⑴ android 粘性廣播是什麼意思

sendBroadcast()這個方法的廣播是能夠發送給所有廣播接收者,按照注冊的先後順序,如果你這個時候設置了廣播接收者的優先順序,優先順序如果恰好與注冊順序相同,則不會有任何問題,如果順序不一樣,會出leaked IntentReceiver 這樣的異常,並且在前面的廣播接收者不能調用abortBroadcast()方法將其終止,如果調用會出BroadcastReceiver trying to return result ring a non-ordered broadcast的異常,當然,先接收到廣播的receiver可以修改廣播數據。

sendOrderedBroadcast()方法顧名思義就是priority的屬性能起作用,並且在隊列前面的receiver可以隨時終止廣播的發送。還有這個api能指定final的receiver,這個receiver是最後一個接收廣播時間的receiver,並且一定會接收到廣播事件,是不能被前面的receiver攔截的。實際做實驗的情況是這樣的,假設我有3個receiver依序排列,並且sendOrderedBroadcast()方法指定了一個finalReceiver,那麼intent傳遞給這4個Receiver的順序為Receiver1-->finalReceiver-->Receiver2-->finalReceiver-->Receiver3-->finalReceiver。這個特性可以用來統計系統中能監聽某種廣播的Receiver的數目。

sendStickyBroadcast()字面意思是發送粘性的廣播,使用這個api需要許可權android.Manifest.permission.BROADCAST_STICKY,粘性廣播的特點是Intent會一直保留到廣播事件結束,而這種廣播也沒有所謂的10秒限制,10秒限制是指普通的廣播如果onReceive方法執行時間太長,超過10秒的時候系統會將這個廣播置為可以幹掉的candidate,一旦系統資源不夠的時候,就會幹掉這個廣播而讓它不執行。
下面是廣播接收者的生命周期以及一些細節部分:
1.廣播接收者的生命周期是非常短暫的,在接收到廣播的時候創建,onReceive()方法結束之後銷毀
2.廣播接收者中不要做一些耗時的工作,否則會彈出Application No Response錯誤對話框
3.最好也不要在廣播接收者中創建子線程做耗時的工作,因為廣播接收者被銷毀後進程就成為了空進程,很容易被系統殺掉
4.耗時的較長的工作最好放在服務中完成

⑵ Android開發中的sendstickybroadcast過時了,替代的是什麼

使用這個
sendBroadcast(Intent
intent)

⑶ android 怎麼導入stickylistheaderslistview 的類庫

主要的核心代碼是一個Adapter,項目的github的README.md上給了一個示例,sample下也有一個比較麻煩的實現,我主要參考了這兩個才明白了使用方式:
Adapter代碼:
private class MyAdapter extends BaseAdapter implements StickyListHeadersAdapter{
private String[] mCountries;
private LayoutInflater mInflater;
public MyAdapter(Context context) {
mInflater = LayoutInflater.from(context);
mCountries = context.getResources().getStringArray(R.array.countries);
}
@Override
public View getHeaderView(int i, View view, ViewGroup viewGroup) {
Log.i("TAG","get HeaderView "+i);
HeaderViewHolder holder;
if (view == null) {
holder = new HeaderViewHolder();
view = mInflater.inflate(R.layout.header, viewGroup, false);
holder.text = (TextView) view.findViewById(R.id.text1);
view.setTag(holder);
} else {
holder = (HeaderViewHolder) view.getTag();
}
// set header text as first char in name
CharSequence headerChar = mCountries[i].subSequence(0, 1);
holder.text.setText(headerChar);
return view;
}
/**
* 這個是用來邊標記浮動headerView的一個方法,返回相同ID的將被顯示為同一View
* @param i 當前位置
* @return 返回唯一ID
*/
@Override
public long getHeaderId(int i) {
Log.i("TAG","get Header ID "+i +" char at "+mCountries[i].subSequence(0, 1).charAt(0));
return mCountries[i].subSequence(0, 1).charAt(0);
}
@Override
public int getCount() {
return mCountries.length;
}
@Override
public Object getItem(int position) {
return mCountries[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("TAG","get View "+ position);
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(Android.R.layout.simple_expandable_list_item_1, parent, false);
holder.text = (TextView) convertView.findViewById(android.R.id.text1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(mCountries[position]);
return convertView;
}
class HeaderViewHolder {
TextView text;
}
class ViewHolder {
TextView text;
}
}

主要用此標記HeaderView的就是HeaderID,返回同一ID的將會顯示為同一個Header
其他的使用與ListView相同。

⑷ 如何讓Service自動重啟而不被kill掉

重寫service的onStartCommand方法。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
簡單介紹下這個方法,在Android開發的過程中,每次調用startService(Intent)的時候,都會調用該Service對象的onStartCommand(Intent,int,int)方法,然後在onStartCommand方法中做一些處理。然後我們注意到這個函數有一個int的返回值,這篇文章就是簡單地講講int返回值的作用。 從Android官方文檔中,我們知道onStartCommand有4種返回值:
START_STICKY:如果service進程被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent對象。隨後系統會嘗試重新創建service,由於服務狀態為開始狀態,所以創建服務後一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那麼參數Intent將為null。
START_NOT_STICKY:「非粘性的」。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill後一定能重啟。
當然也還有其他解決方案,但是或多或少都會出現一些弊端或者相對來說比較麻煩。在這里舉幾個最常見的例子:
1.在onDestory方法中重啟Service服務,一般來說,這樣做是可以的。但是如果這樣----》設置-->下載-->強制停止。則不會執行ondestory方法,或者通過別人應用,如360直接kill掉我的應用時,也是不會調用Service的ondestory方法的。
2.修改AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
<application android:icon="@drawable/icon"
android:label="@string/app_name" android:allowClearUserData="false"
android:process="system" android:killAfterRestore="false">
如果在加入了此部分代碼,表示該程序運行在system進程組中,system進程組是沒有許可權訪問sd卡的,而且service是不會自動重啟的。
3.提高service的優先順序別,不管你service的優先順序別有多高,用戶都是可以手動殺死的.
等等還有其他很多種方式,這里就不一一列舉了。

所以如果要使自己的Service能夠一直運行,最簡單的方法就是重寫onStartCommand方法就好了.但是千萬不要做壞事,不要做被用戶鄙視的惡意程序

⑸ 怎麼讓Android程序一直後台運行,像QQ一樣不被殺死

1、首先要保證你的程序一直在於後台運行,也就是所謂和守護程序一樣,而且在任何認為kill和系統內存回收kill後,保證重啟。
2、獲取系統內部資源。
3、上報策略,間隔時間上報還是按月按天上報。
4、監測網路,當網路開啟的時候第一時間上報數據。
5、伺服器連接。
對於以上問題的解決:
1、利用廣播BroadcastReceiver監聽,當系統啟動時啟動服務service,監聽的action是
android.intent.action.BOOT_COMPLETED,當服務被kill時在onDestroy()再次啟動服務,在
onStartCommand()中 設置 flags = START_STICKY;return
super.onStartCommand(intent, flags, startId),保證服務重啟。
2、利用getPackageManager(),getInstalledPackages(),getApplicationInfo()來獲取系統安裝數據。
3、上報策略可以每天(時間間隔24小時),但是不是很准確,一般按日上報不做時間間隔這樣個人認為比較准確。
4、檢測開啟網路上報數據,還是利用廣播BroadcastReceiver監聽,監聽action為android.net.conn.CONNECTIVITY_CHANGE,當發現網路開啟時就觸發數據上報。
5、伺服器連接,如果你了解java熟悉java企業級開發,那麼你對httpclient並不陌生,很幸運的是android sdk已經集成了httpclient,那我們伺服器連接首選它了。

以上是我做的解決方案,你是否有更好的替代品,希望我只是拋了塊磚頭,後面你繼續。。。。

service被系統異常kill掉後回重啟。有以下值:

onStartCommand有三種返回值:
START_STICKY:sticky的意思是「粘性的」。使用這個返回值時,我們啟動的服務跟應用程序」粘」在一起,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務。當再次啟動服務時,傳入的第一個參數將為null;
START_NOT_STICKY:「非粘性的」。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。

⑹ android,return START_STICKY; ...super.handleMessage(msg);...何時需要屏蔽super();,,為啥呢

super()是調用父類的無參數構造方法。。。。。。。何時需要super,得看需求邏輯是不是調用父類的方法過程。

⑺ android 自定義的launcher在6.0後需要動態申請許可權

6.0許可權的基本知識,以下是需要單獨申請的許可權,共分為9組,每組只要有一個許可權申請成功了,就默認整組許可權都可以使用了。

group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA
permission:android.permission.CAMERA group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS

  • 以下是普通許可權,只需要在AndroidManifest.xml中申請即可。

    android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
    android.permission.ACCESS_NETWORK_STATE
    android.permission.ACCESS_NOTIFICATION_POLICY
    android.permission.ACCESS_WIFI_STATE
    android.permission.ACCESS_WIMAX_STATE
    android.permission.BLUETOOTH
    android.permission.BLUETOOTH_ADMIN
    android.permission.BROADCAST_STICKY
    android.permission.CHANGE_NETWORK_STATE
    android.permission.CHANGE_WIFI_MULTICAST_STATE
    android.permission.CHANGE_WIFI_STATE
    android.permission.CHANGE_WIMAX_STATE
    android.permission.DISABLE_KEYGUARD
    android.permission.EXPAND_STATUS_BAR
    android.permission.FLASHLIGHT
    android.permission.GET_ACCOUNTS
    android.permission.GET_PACKAGE_SIZE
    android.permission.INTERNET
    android.permission.KILL_BACKGROUND_PROCESSES
    android.permission.MODIFY_AUDIO_SETTINGS
    android.permission.NFC
    android.permission.READ_SYNC_SETTINGS
    android.permission.READ_SYNC_STATS
    android.permission.RECEIVE_BOOT_COMPLETED
    android.permission.REORDER_TASKS
    android.permission.REQUEST_INSTALL_PACKAGES
    android.permission.SET_TIME_ZONE
    android.permission.SET_WALLPAPER
    android.permission.SET_WALLPAPER_HINTS
    android.permission.SUBSCRIBED_FEEDS_READ
    android.permission.TRANSMIT_IR
    android.permission.USE_FINGERPRINT
    android.permission.VIBRATE
    android.permission.WAKE_LOCK
    android.permission.WRITE_SYNC_SETTINGS
    com.android.alarm.permission.SET_ALARM
    com.android.launcher.permission.INSTALL_SHORTCUT
    com.android.launcher.permission.UNINSTALL_SHORTCUT
熱點內容
android使用at命令 發布:2025-01-18 20:54:51 瀏覽:216
phptiny 發布:2025-01-18 20:54:03 瀏覽:987
怎麼給漢字加密 發布:2025-01-18 20:49:44 瀏覽:865
遍歷javamap 發布:2025-01-18 20:39:05 瀏覽:624
我的世界租伺服器哪裡最便宜 發布:2025-01-18 20:38:50 瀏覽:564
dhcp伺服器地址租期時間怎麼調整 發布:2025-01-18 20:28:02 瀏覽:267
加密區的圖片 發布:2025-01-18 20:22:17 瀏覽:474
key文件加密 發布:2025-01-18 20:12:07 瀏覽:736
etl伺服器怎麼用 發布:2025-01-18 20:08:18 瀏覽:281
硫酸鎂演算法 發布:2025-01-18 19:53:00 瀏覽:670