導航:首頁 > 操作系統 > android隊列

android隊列

發布時間:2022-02-11 17:32:50

❶ 如何抓取廣播隊列消息 android

下面和大家分享一下android中非常重要的消息處理機制,說到消息處理,Message,MessageQueue,Looper,Handler這四個類的作用是我們必須要明白的。 下面分別談談他們的作用: MessageQueue MessageQueue表示消息隊列,存放消息的地方,按照「先進先..則執行,每一個線程只可以擁有一個MessageQueue。當創建Looper對象的時候會創建一個MessageQueue對象。

Message

Message表示消息對象,MessageQueue中存放的對象,一個MessageQueue中可以存放多個Message對象。通過調用Message類的obtain()方法或者調用Handler類的obtainMessage()方法獲取Message對象,但是這樣並不一定會創建一個新的Message對象,如果消息池中有可用的Message對象則直接取出返回這個對象,否則如果消息池中沒有可用的Message對象,則會創建一個新的Message對象。當消息隊列中的Message對象被系統處理完之後,該Message對象會從MessageQueue中刪除,然後放入消息池中。

Looper

Looper是用來操作MessageQueue的,每一個Looper對應一個MessageQueue,可以通過調用Looper.myLooper()方法獲取當前線程的Looper對象,Looper循環從MessageQueue中取出Message對象,交給Handler調用handleMessage方法進行處理,處理完之後Message對象被放入消息池中。

Handler

Handler是消息的處理者,Handler將需要傳遞的信息封裝成Message對象,然後調用sendMessage方法將Message放入MessageQueue中,當MessageQueue循環到該Message時,調用相應Handler對象的handleMessage方法對其進行處理。 http://d-android.com/developer/
注意在UI線程也就是主線程中默認會創建Looper對象和MessageQueue對象,如果在我們自己新開的線程中要進行消息處理,必須創建Looper對象和MessageQueue對象,通過調用Looper.prepare()方法可以創建Looper對象和MessageQueue對象,調用Looper.loop()方法可以啟動消息循環隊列。

❷ android怎樣編寫延時消息隊列

最早的時候我下過一個2005EE版,怎麼也安裝不上,後來發現原來是EE不支持xp =_= , 然後就下 .... 本機沒有安裝過消息隊列,找出系統盤安裝消息隊列組件,在組件安裝中

❸ android 怎麼finish掉上一個activity

假如A,B兩個Activity。
現在因為不清楚你的需求,我只能假設兩種方法。
第一種
A 跳轉到B.這種情況下如何關閉 A。在A跳轉前。 A.this.finish();
然後再執行跳轉。
第二種
就是必須的在B中結束A。
public class ActivityManagerApplication extends Application {

private static Map<String,Activity> destoryMap = new HashMap<>();

private ActivityManagerApplication() {
}

/**
* 添加到銷毀隊列
*
* @param activity 要銷毀的activity
*/

public static void addDestoryActivity(Activity activity,String activityName) {
destoryMap.put(activityName,activity);
}
/**
*銷毀指定Activity
*/
public static void destoryActivity(String activityName) {
Set<String> keySet=destoryMap.keySet();
for (String key:keySet){
destoryMap.get(key).finish();
}
}
}
在A創建的時候,調用 add方法把當前的A添加進去。
當需要結束的時候,在B中調用 destoryActivity方法,指定添加A時的Key值來finish 掉A

❹ android handler中 messagequeue和looper都什麼啥時候創建

說吧handler消息隊列其Message newhandler候同攜帶Message象需要傳遞信息候直接拿ok同建議看啊Handler 機制原理 (給列舉算): andriod提供 Handler Looper 滿足線程間通信Handler 先進先原則Looper類用管理特定線程內象間消息交換(Message Exchange) 1)Looper: 線程產Looper象由管理線程Message Queue(消息隊列) 2)Handler: 構造Handler象與Looper溝通便push新消息Message Queue;或者接收LooperMessage Queue取)所送消息 3) Message Queue(消息隊列):用存放線程放入消息 4)線程:UI thread 通main threadAndroid啟程序替建立Message Queue

❺ android里的所有事件都是基於消息隊列的嗎

Android廣播分為兩個方面:廣播發送者和廣播接收者,通常情況下,BroadcastReceiver指的就是廣播接收者(廣播接收器)。廣播作為Android組件間的通信方式,可以使用的場景如下:1.同一app內部的同一組件內的消息通信(單個或多個線程之間)。2.同一app內部的不同組件之間的消息通信(單個進程)。3.同一app具有多個進程的不同組件之間的消息通信。4.不同app之間的組件之間消息通信。5.Android系統在特定情況下與App之間的消息通信。從實現原理看上,Android中的廣播使用了觀察者模式,基於消息的發布/訂閱事件模型。因此,從實現的角度來看,Android中的廣播將廣播的發送者和接受者極大程度上解耦,使得系統能夠方便集成,更易擴展。具體實現流程要點粗略概括如下:1.廣播接收者BroadcastReceiver通過Binder機制向AMS(Activity Manager Service)進行注冊;2.廣播發送者通過binder機制向AMS發送廣播;3.AMS查找符合相應條件(IntentFilter/Permission等)的BroadcastReceiver,將廣播發送到BroadcastReceiver(一般情況下是Activity)相應的消息循環隊列中;4.消息循環執行拿到此廣播,回調BroadcastReceiver中的onReceive()方法。 對於不同的廣播類型,以及不同的BroadcastReceiver注冊方式,具體實現上會有不同。但總體流程大致如上。

❻ 【Android開發】怎麼在ListView中做一個圖片批量上傳的隊列

先是兩個layout:
1、main.xml

復制代碼
復制代碼
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent">
6 <ListView
7 android:layout_width="fill_parent"
8 android:layout_height="fill_parent"
9 android:focusable="false"
10 android:id="@+id/lvImageList" >
11 </ListView>
12 </LinearLayout>
復制代碼
復制代碼
2、listitem.xml

復制代碼
復制代碼
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="horizontal"
4 android:layout_width="fill_parent"
5 android:layout_height="?android:attr/listPreferredItemHeight">
6 <ImageView
7 android:id="@+id/itemImgImageInfo"
8 android:layout_marginTop="4dip"
9 android:layout_marginBottom="4dip"
10 android:layout_width="?android:attr/listPreferredItemHeight"
11 android:layout_height="?android:attr/listPreferredItemHeight">
12 </ImageView>
13 <TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
14 android:layout_width="fill_parent"
15 android:layout_height="fill_parent"
16 android:paddingLeft="4dip"
17 android:mode="twoLine">
18 <CheckedTextView
19 android:id="@+id/itemChkImageInfo"
20 android:layout_width="fill_parent"
21 android:layout_height="wrap_content"
22 android:gravity="center_vertical"
23 android:textAppearance="?android:attr/textAppearanceSmall"
24 android:checkMark="?android:attr/listChoiceIndicatorMultiple">
25 </CheckedTextView>
26 <TextView
27 android:id="@+id/itemTxtImageInfo"
28 android:layout_width="fill_parent"
29 android:layout_height="wrap_content"
30 android:gravity="center_vertical|top"
31 android:layout_marginBottom="4dip"
32 android:layout_below="@+id/itemChkImageInfo"
33 android:textAppearance="?android:attr/textAppearanceSmall">
34 </TextView>
35 </TwoLineListItem>
36 </LinearLayout>
復制代碼
復制代碼
接著是代碼:
復制代碼
復制代碼
1 package com.android.MultipleChoiceImageList;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.app.Activity;
9 import android.content.Context;
10 import android.database.Cursor;
11 import android.graphics.Bitmap;
12 import android.net.Uri;
13 import android.os.Bundle;
14 import android.provider.MediaStore;
15 import android.provider.MediaStore.Images;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.widget.AdapterView;
20 import android.widget.CheckedTextView;
21 import android.widget.ImageView;
22 import android.widget.ListView;
23 import android.widget.SimpleAdapter;
24 import android.widget.TextView;
25 import android.widget.AdapterView.OnItemClickListener;
26
27 public class MainActivity extends Activity {
28
29 private ListView lvImageList;
30
31 private String imageID= "imageID";
32 private String imageName = "imageName";
33 private String imageInfo = "imageInfo";
34
35 private ArrayList<String> fileNames = new ArrayList<String>();
36
37 private mAdapter;
38
39 /** Called when the activity is first created. */
40 @Override
41 public void onCreate(Bundle savedInstanceState) {
42 super.onCreate(savedInstanceState);
43 setContentView(R.layout.main);
44
45 lvImageList=(ListView) this.findViewById(R.id.lvImageList);
46 lvImageList.setItemsCanFocus(false);
47 lvImageList.setOnItemClickListener(new OnItemClickListener() {
48 @Override
49 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
50
51 CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.itemChkImageInfo);
52 checkedTextView.toggle();
53 mAdapter.setCheckItem(position, checkedTextView.isChecked());
54 }
55 });
56 try{
57 String[] from = {imageID, imageName, imageInfo};
58 int[] to = {R.id.itemImgImageInfo, R.id.itemChkImageInfo, R.id.itemTxtImageInfo};
59 mAdapter = new (MainActivity.this, GetImageList(), R.layout.listitem, from, to);
60 lvImageList.setAdapter(mAdapter);
61 }
62 catch(Exception ex){
63 return;
64 }
65 }
66
67 //獲取圖片列表
68 private ArrayList<Map<String, String>> GetImageList(){
69
70 ArrayList<Map<String, String>> imageList = new ArrayList<Map<String,String>>();
71 HashMap<String, String> imageMap;
72
73 //讀取SD卡中所有圖片
74 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
75 String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.DATA, MediaStore.Images.Media.SIZE};
76 String selection = MediaStore.Images.Media.MIME_TYPE + "=?";
77 String[] selectionArg ={"image/jpeg"};
78 Cursor mCursor = this.managedQuery(uri, projection, selection, selectionArg, MediaStore.Images.Media.DISPLAY_NAME);
79 imageList.clear();
80 if (mCursor != null) {
81 mCursor.moveToFirst();
82 while (mCursor.getPosition() != mCursor.getCount())
83 {
84 imageMap= new HashMap<String, String>();
85 imageMap.put(imageID, mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media._ID)));
86 imageMap.put(imageName, mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)));
87 imageMap.put(imageInfo, " " + (mCursor.getLong(mCursor.getColumnIndex(MediaStore.Images.Media.SIZE))/1024)+"KB");
88 imageList.add(imageMap);
89 fileNames.add(mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
90 mCursor.moveToNext();
91 }
92 mCursor.close();
93 }
94 return imageList;
95 }
96
97 //可多選圖片列表適配器
98 class extends SimpleAdapter {
99
100 private Map<Integer, Boolean> map;
101 private List<Integer> state;
102 private List<? extends Map<String, ?>> mList;
103
104 LayoutInflater mInflater;
105
106 public (Context context, List<Map<String, String>> data, int resource, String[] from, int[] to) {
107 super(context, data, resource, from, to);
108 map = new HashMap<Integer, Boolean>();
109 mInflater = LayoutInflater.from(context);
110 mList = data;
111 for(int i = 0; i < data.size(); i++) {
112 map.put(i, false);
113 }
114 state = new ArrayList<Integer>();
115 }
116
117 @Override
118 public int getCount() {
119 return mList.size();
120 }
121
122 @Override
123 public Object getItem(int position) {
124 return position;
125 }
126
127 @Override
128 public long getItemId(int position) {
129 return position;
130 }
131
132 //設置條目選中狀態
133 public void setCheckItem(int position, Boolean isChecked){
134 map.put(position, isChecked);
135 if (state.contains(position))
136 state.remove((Object)position);
137 if (isChecked){
138 state.add(position);
139 }
140 }
141
142 //獲取列表中已選中條目
143 public long[] getCheckItemIds(){
144 int count = state.size();
145 long[] ids = new long[count];
146 for (int i = 0; i < count; i++) {
147 ids[i]= (long)state.get(i);
148 }
149 return ids;
150 }
151
152 @Override
153 public View getView(int position, View convertView, ViewGroup parent) {
154 if(convertView == null) {
155 convertView = mInflater.inflate(R.layout.listitem, null);
156 }
157
158 CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.itemChkImageInfo);
159 checkedTextView.setChecked(map.get(position));
160 checkedTextView.setText((String)mList.get(position).get(imageName));
161
162 TextView textView = (TextView) convertView.findViewById(R.id.itemTxtImageInfo);
163 textView.setText((String)mList.get(position).get(imageInfo));
164
165 //顯示圖片縮略圖
166 ImageView image = (ImageView) convertView.findViewById(R.id.itemImgImageInfo);
167 Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), Long.parseLong((String)mList.get(position).get(imageID)), Images.Thumbnails.MICRO_KIND, null);
168 image.setImageBitmap(bm);
169
170 return convertView;
171 }
172 }
173 }

❼ android 中,怎麼清除一個Handler里的所有消息隊列有什麼方法么

final void removeMessages(int what)
Remove any pending posts of messages with code 'what' that are in the message queue.
這個是我看API裡面的一個方法。看解釋應該是異常指定標識what對應的那個消息msg。。希望對你有幫助

❽ rxjava 用到了android的事件隊列了嗎

一個詞:非同步
rxJava在github主頁上的介紹是
"a library for composing asynchronous and event-based programs using observable sequences for the Java VM"
大概的意思就是一個在 Java VM 上使用可觀測的序列來組成非同步的、基於事件的程序的庫。
其實rxJava的本質就是一個詞,非同步,它就是一個非同步操作的庫。
二、rxJava的好處
簡潔
非同步操作的比較關鍵的一點就是程序的簡潔,在調用復雜的非同步操作的時候,代碼回顯得很復雜,不僅難寫也很難懂。雖然android 創造的asynTask和handler 都是為了讓代碼更加簡潔。
rxJava的優勢在於,隨著程序邏輯越來越復雜,代碼依然很清晰
三、rxJava的基本原理
rxJava實現非同步,是通過擴展觀察者模式來實現的。
首先,講述下,觀察者模式
觀察者模式即是,a對象對b對象的某一個動作特別關注,做著密切的觀察,當a對象做出了這個動作的時候,b對象立刻做出相應的處理。就好比android中的點擊事件(onClickListener),

onClickListener.jpg
當button按鈕被點擊的時候,觀察者對這個點擊事件做出自己的反應
轉變為通用的觀察者模式如下:

rxJava.jpg
observable被觀察者,在做出某一事件的時候,通知observer觀察者做出處理
RxJava使用的就是通用型的觀察者模式。
RxJava觀察者模式
rxJava有四個基本概念,observable(可觀察者、被觀察者)、observer(觀察者)、subscrib(訂閱)。
observable和observer通過subscrib實現訂閱的關系,在observable需要的時候,發送通知給observer。
和傳統的觀察者模式不同,rxJava的回調事件除了onNext事件意外(相當於onClick,Onevent事件),還定義了兩個特殊的事件:onCompleted()、onError()
onCompleted():事件結束觸發。rxJava不僅僅將事件單獨處理,還會把他們作為一個隊列,在沒有onNext()事件觸發的時候,通過調用omCompleted()作為結束
onError():事件隊列異常觸發。當事件隊列發生異常的時候調研onError(),同時事件隊列停止,不執行任何事件了。
在隊列事件中,onCompleted()和onError()是相互對立的,兩者正常只會有一個調用。

❾ android怎麼實現任務隊列

主要就是有一個線程隊列,維護這些任務,這里沒有用到Queue而是用List是考慮到顯示的問題。

閱讀全文

與android隊列相關的資料

熱點內容
e站初音未來圖片解壓碼 瀏覽:573
榮耀老熊編譯器開源 瀏覽:931
北京php程序員培訓 瀏覽:664
手動壓縮空氣調節閥 瀏覽:455
天正2014未知命令 瀏覽:747
linuxrarp命令 瀏覽:650
家用空調壓縮機有皮帶嗎 瀏覽:53
製作解壓小書本 瀏覽:91
python3x爬蟲 瀏覽:68
通達信資金抬轎k線源碼 瀏覽:820
linuxluci 瀏覽:729
python如何按條件分配填充 瀏覽:894
ar89c51單片機編程 瀏覽:579
在編譯原理中單詞由什麼組成 瀏覽:499
安卓攝像頭一直閃爍怎麼回事 瀏覽:878
word文檔加密設置有幾種方法 瀏覽:502
釘釘加密咋取消啊 瀏覽:772
linux判斷文件大小 瀏覽:798
伺服器中間ic叫什麼 瀏覽:882
文件解壓加密碼 瀏覽:995