Androidリクエストネットワーク-サードパーティライブラリandroid-async-httpの使用(3)


本文は作者のオリジナルで、転載して原文の住所を添付して、ありがとうございます!
原文住所:http://blog.csdn.net/a774057695/article/details/47337547
前言
         前に私たちは大体どのようにアクセスするかを知っていましたが、この記事は急いでデータを手に入れた後の処理をするのではなく、アクセスをキャンセルすると思います.
         アクセスネットワークは時間のかかる操作であり、私たちは絶対にこの操作をメインスレッドに置かないと思います.私たちは必ずユーザーに現在待機している過程をどのように丁寧に通知するかを考え、この過程を面白く、文芸的に見せるかを考えていると思います.しかし、ユーザーが直接離れる可能性は否定できません.私たちはこのような状況に遭遇したことがあるかもしれません.
1.       プロンプト待ちのProgressDialogオブジェクトはキャンセル不可に設定されており、ポイントバックグラウンドが応答せず、最終的にユーザーを怒らせます.
2.       提示待ちのProgressDialogオブジェクトはキャンセルでき、ユーザーは他のインタフェースに来た.元のインタフェースの多くは破棄されずactivityスタックの非上部に存在し、ネットワーク要求が結果(望ましくない結果であっても)を得ると、このスレッドは後続の論理を実行してactivityをフロントに戻し、乱暴にユーザーを中断する.
3.       上記の状況を考慮して、スレッドを処理しましたが、ネットワークへのアクセス要求は本当にキャンセルされませんでした.バックグラウンドでトラフィックを消費し、価値のあることをしていません.
        まだこれらの問題をうまく解決していない友达は自分のコードにきっと満足していないと思います.aahではこの部分をよく処理しています. 
        第1編では,構造関数でHttpClientインスタンスを取得するたびにcontextを与えるコードについても触れた.いくつかの説明があります
1.       静的メソッドにはcontext参照がありGC回収に影響します.ここではdemoです.これらの問題は処理しません.
2.       パラメータを持たないpostの方法(私はどうしても必要ないと思いますが、使わない)の原型には注意が必要です
3.   第1編では修正されず、
        まずsampleで使うurlを整理して、公式の例からほじくり出して、私はweb開発をしないので、いくつかの便利なテストアドレスもはっきりしていないで、本当に1種の本が使う時恨みが少ない感じがします.
モード
方法
baseurl
get
getWithoutParams
http://httpbin.org/delay/6
getWithparams
http://httpbin.org/delay/6
post
postWithParams
https://httpbin.org/post
 目的の説明
本編では、主にキャンセル要求機能を説明し、キャンセルには3つの主な方法があります.
  • 全部キャンセル
  • tagに従って
  • をキャンセル
  • request handle
  • をキャンセル
    実はもう一つの主な方法があります.contextが必要です.このcontextを引用したrequestsを全部cancelして、本編ではプレゼンテーションをしません.
    経験に限られて、私はテストの規範についてよく知らないが、そういえばこの編もいくつかの機能を使って、logを利用して証明しようとしただけだ.
    今回私たちはこのようなことをします.
  • 効果を見るように要求する
  • 同じリクエストを複数開始する効果
  • を見る.
  • 複数の異なる方式の要求を開始する効果
  • を見る.
  • は、戻る前にプログラムを非最上位に見せるように要求する
  • を開始する.
  • は、複数の要求を開始し、戻る前にプログラムを非最上位の効果
  • にする.
  • は、戻る前に3つの方法で効果
  • をキャンセルする要求を開始する.
  • は、複数の要求を開始し、戻る前に3つの方法で効果
  • をキャンセルする.
    コード#コード#
    合計3つのコードファイル:レイアウトファイル、HttpUtilメソッドクラス、activityインスタンス.
  • 新規プロジェクトの注意インターネット権限
  • 操作を容易にするために、私はリクエスト時にdialogなどの操作を表示しませんでした.
  • は、第1編とは異なり、context
  • が提供されています.
  • sampleとしてのコード品質は低く、aah
  • を理解するためにアプリケーションに移行しないでください.
  • 注意!注意!注意!操作を容易にするために、http://httpbin.org/delay/66秒遅れて応答するので、小さくしたり大きくしたりすることができますが、接続タイムアウト設定時間は合理的に設定してください.

  • レイアウトファイル:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
    
                <Button
                    android:id="@+id/btn_getWithoutParams"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:text="getWithoutParams" />
    
                <Button
                    android:id="@+id/btn_getWithParams"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:text="getWithParams" />
    
                <Button
                    android:id="@+id/btn_postWithParams"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="10dp"
                    android:text="postWithParams" />
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >
    
                    <Button
                        android:id="@+id/btn_addHandle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="SaveHandle" />
    
                    <Button
                        android:id="@+id/btn_cancelHandle"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:padding="10dp"
                        android:text="cancel request handle" />
    
                </LinearLayout>
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >
    
                    <Button
                        android:id="@+id/btn_setTag"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="requestWithTag" />
    
                    <Button
                        android:id="@+id/btn_cancelTag"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="cancel by tag" />
    
                  
                </LinearLayout>
    
                <Button
                    android:id="@+id/btn_cancelAll"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="cancel all" />
    
            </LinearLayout>
        </ScrollView>
    
    </LinearLayout>
    

    次のように見えます.
    (なんとか大きさを変える方法に気づいたので、ブスだから気にしないで)
    HttpUtil.java
    package [your package name]
    
    import java.util.LinkedList;
    import java.util.List;
    
    import android.content.Context;
    
    import com.loopj.android.http.AsyncHttpClient;
    import com.loopj.android.http.AsyncHttpResponseHandler;
    import com.loopj.android.http.BinaryHttpResponseHandler;
    import com.loopj.android.http.JsonHttpResponseHandler;
    import com.loopj.android.http.RequestHandle;
    import com.loopj.android.http.RequestParams;
    
    public class HttpUtil {
    	//     
        private static AsyncHttpClient client =new AsyncHttpClient();
        private static List<RequestHandle> requestHandles = new LinkedList<RequestHandle>();
        
        //      ,     ,   10s
        static
        {
            client.setTimeout(10000);
        }
        
        /**
         *     params,get  
         *   byte[],     
         * */
        public static void getWithoutParams(Context mContext, String urlString,AsyncHttpResponseHandler res)
        {
            client.get(mContext ,urlString, res);
        }
        
        /**
         *    params,get  
         *   byte[],     
         * */
        public static void getWithParams(Context mContext , String urlString,RequestParams params,AsyncHttpResponseHandler res)
        {
            client.get(mContext, urlString, params,res);
        }
        
        /**
         *   params、get  
         *   JsonObject  JsonArray
         *     
         * */
        public static void getWithoutParamsForJson(Context mContext , String urlString,JsonHttpResponseHandler res)
        {
            client.get(mContext ,urlString, res);
        }
        
        /**
         *  params、get  
         *   JsonObject  JsonArray
         *     
         * */
        public static void getWithParamsForJson(Context mContext, String urlString,RequestParams params,JsonHttpResponseHandler res)
        {
            client.get(mContext,urlString, params,res);
        }
        
        /**
         *       
         *   byte  
         * */
        public static void get(String uString, BinaryHttpResponseHandler bHandler)
        {
            client.get(uString, bHandler);
        }
        
        /**
         *     params, post
         *        ,     params 
         * */
        public static void postWithoutParams(String urlString, AsyncHttpResponseHandler res)
        {
        	client.post(urlString, res);
        }
        
        /**
         *    params,post
         * */
        public static void postWithParams(Context mContext, String urlString,RequestParams params, AsyncHttpResponseHandler res)
        {
        	client.post(mContext, urlString, params, res);
        }
        
        
        public static AsyncHttpClient getClient()
        {
            return client;
        }
        
        
        public static void setTag(Context mContext,String urlString,AsyncHttpResponseHandler res,int tag)
        {
        	client.get(mContext, urlString, res).setTag(tag);
        }
        
        /**
         *   handle
         * */
        public static void setHandle(Context mContext,String urlString,AsyncHttpResponseHandler res)
        {
        	addHandle(getWithoutParams2(mContext,urlString,res));
        }
        
        // handle       
        private static void addHandle(RequestHandle handle) {
    		if(null!=handle) {
    			requestHandles.add(handle);
    		}
    	}
        
        //    handle     
        public static List<RequestHandle> getRequestHandles() {
            return requestHandles;
        }
    
        //get  ,  RequestHandle
        private static RequestHandle getWithoutParams2(Context mContext, String urlString,AsyncHttpResponseHandler res)
        {
           return client.get(mContext ,urlString, res);
        }
    }
    

    MainActivity.java
    package [your package name]
    
    import org.apache.http.Header;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    import com.loopj.android.http.AsyncHttpResponseHandler;
    import com.loopj.android.http.RequestHandle;
    import com.loopj.android.http.RequestParams;
    
    @SuppressWarnings("deprecation")
    public class MainActivity extends Activity {
    	private Context mContext = this;
    	
    	private int tag = 0;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Button getWithParams = (Button)findViewById(R.id.btn_getWithParams);
    		Button getWithoutParams = (Button)findViewById(R.id.btn_getWithoutParams);
    		Button postWithParams = (Button)findViewById(R.id.btn_postWithParams);
    		Button cancelHandle = (Button)findViewById(R.id.btn_cancelHandle);
    		Button cancelTag = (Button)findViewById(R.id.btn_cancelTag);
    		Button cancelAll = (Button)findViewById(R.id.btn_cancelAll);
    		Button requestSaveHandle = (Button)findViewById(R.id.btn_addHandle);
    		Button requestWithTag = (Button)findViewById(R.id.btn_setTag);
    		
    		getWithoutParams.setOnClickListener(bt_listener);
    		getWithParams.setOnClickListener(bt_listener);
    		postWithParams.setOnClickListener(bt_listener);
    		cancelAll.setOnClickListener(bt_listener);
    		cancelHandle.setOnClickListener(bt_listener);
    		cancelTag.setOnClickListener(bt_listener);
    		requestSaveHandle.setOnClickListener(bt_listener);
    		requestWithTag.setOnClickListener(bt_listener);
    	}
    	OnClickListener bt_listener = new OnClickListener() {
    		
    		@Override
    		public void onClick(View v) {
    			switch(v.getId()) {
    				case R.id.btn_getWithoutParams:
    					getWithoutParams();
    					break;
    				case R.id.btn_getWithParams:
    					getWithParams();
    					break;
    				case R.id.btn_postWithParams:
    					postWithParams();
    					break;
    				case R.id.btn_addHandle:
    					addHandle();
    					break;
    				case R.id.btn_cancelHandle:
    					cancelHandle();
    					break;
    				case R.id.btn_setTag:
    					setTag();
    					break;
    				case R.id.btn_cancelTag:
    					cancelByTag();
    					break;
    				case R.id.btn_cancelAll:
    					cancelall();
    					break;
    				default:
    					break;
    			}
    		}
    	};
    	
    	
    	 private void getWithoutParams() {
    	        String urlString = "http://httpbin.org/delay/6";
    	        HttpUtil.getWithoutParams(mContext,urlString, new AsyncHttpResponseHandler() {
    
    				@Override
    				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
    						Throwable arg3) {
    					Log.i("statuscode:", ""+arg0);
    					arg3.printStackTrace(System.out);
    				}
    				@Override
    				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    					Log.i("statuscode:", ""+arg0);
    					String jsonString = new String(arg2);
    					Log.i("response:",jsonString);
    				}
    	        });
    	    }
    	
    	 
    	 protected void addHandle() {
    		 String urlString = "http://httpbin.org/delay/6";
    	        HttpUtil.setHandle(mContext,urlString, new AsyncHttpResponseHandler() {
    
    				@Override
    				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
    						Throwable arg3) {
    					Log.i("statuscode:", ""+arg0);
    					arg3.printStackTrace(System.out);
    				}
    				@Override
    				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    					Log.i("statuscode:", ""+arg0);
    					String jsonString = new String(arg2);
    					Log.i("response:",jsonString);
    				}
    	        });
    		
    	}
    
    
    	protected void cancelHandle() {
    
    		 Log.d("CancelLog", String.format("Number of handles found: %d", HttpUtil.getRequestHandles().size()));
    	        int counter = 0;
    	        for (RequestHandle handle : HttpUtil.getRequestHandles()) {
    	            if (!handle.isCancelled() && !handle.isFinished()) {
    	                Log.d("CancelLog", String.format("Cancelling handle %d", counter));
    	                Log.d("CancelLog", String.format("Handle %d cancel", counter) + (handle.cancel(true) ? " succeeded" : " failed"));
    	            } else {
    	                Log.d("CancelLog", String.format("Handle %d already non-cancellable", counter));
    	            }
    	            counter++;
    	        }
    	}
    
    
    	protected void setTag() {
    		 String urlString = "http://httpbin.org/delay/6";
    	        HttpUtil.setTag(mContext,urlString, new AsyncHttpResponseHandler() {
    
    				@Override
    				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
    						Throwable arg3) {
    					Log.i("statuscode:", ""+arg0);
    					arg3.printStackTrace(System.out);
    				}
    				@Override
    				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    					Log.i("statuscode:", ""+arg0);
    					String jsonString = new String(arg2);
    					Log.i("response:",jsonString);
    				}
    	        },tag);
    	}
    
    
    	private void getWithParams() {
    	        String urlString = "http://httpbin.org/delay/6";
    	        RequestParams params = new RequestParams();
    	        params.add("key1", "v1");
    	        params.add("key2", "v2");
    	        
    	        HttpUtil.getWithParams(mContext, urlString, params, new AsyncHttpResponseHandler() {
    
    				@Override
    				public void onFailure(int arg0, Header[] arg1, byte[] arg2,
    						Throwable arg3) {
    					Log.i("statuscode:", ""+arg0);
    					arg3.printStackTrace(System.out);
    				}
    				@Override
    				public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    					Log.i("statuscode:", ""+arg0);
    					String jsonString = new String(arg2);
    					Log.i("response:",jsonString);
    				}
    	        });
    	    }
    	 
    	 
    	 private void cancelall() {
    		 HttpUtil.getClient().cancelAllRequests(true);
    	 }
    
    	 private void cancelByTag() {
    		 HttpUtil.getClient().cancelRequestsByTAG(tag, true);
    	 }
    	 
    	private void postWithParams() {
            String urlString = "https://httpbin.org/post";
            RequestParams params = new RequestParams();
            params.add("postParam1", "p1");
            params.add("postParam2", "p2");
    
            
            HttpUtil.postWithParams(mContext,urlString, params, new AsyncHttpResponseHandler() {
    			@Override
    			public void onFailure(int arg0, Header[] arg1, byte[] arg2,
    					Throwable arg3) {
    				Log.i("statuscode:", ""+arg0);
    				String er = new String(arg2);
    				Log.i("errorResponse:",""+er);
    				arg3.printStackTrace(System.out);
    			}
    			@Override
    			public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    				Log.i("statuscode:", ""+arg0);
    				String jsonString = new String(arg2);
    				Log.i("response:",jsonString);
    			}
            });
    	}
    
    }
    

    テスト内容
    まずリクエストを開始し、log出力を見てみましょう.
    08-07 13:44:07.453: I/View(14827): Touch down dispatch to android.widget.Button{42a2e598 VFED..C. ........ 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=157.73648, y[0]=43.82669, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487004872, downTime=487004872, deviceId=3, source=0x1002 }
    08-07 13:44:07.517: I/View(14827): Touch up dispatch to android.widget.Button{42a2e598 VFED..C. ...p.... 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=156.73787, y[0]=38.830597, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487004938, downTime=487004872, deviceId=3, source=0x1002 }
    08-07 13:44:07.528: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:44:07.528: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:44:07.528: D/dalvikvm(14827): create new thread
    08-07 13:44:07.529: D/dalvikvm(14827): new thread created
    08-07 13:44:07.529: D/dalvikvm(14827): update thread list
    08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: interp stack at 0x60d80000
    08-07 13:44:07.529: D/dalvikvm(14827): init ref table
    08-07 13:44:07.529: D/dalvikvm(14827): init mutex
    08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: created from interp
    08-07 13:44:07.529: D/dalvikvm(14827): start new thread
    08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: notify debugger
    08-07 13:44:07.529: D/dalvikvm(14827): threadid=12 (pool-1-thread-6): calling run()
    08-07 13:44:07.530: I/System.out(14827): [CDS]rx timeout:1
    08-07 13:44:07.530: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:44:07.530: I/System.out(14827): [CDS]close[53132]
    08-07 13:44:07.530: I/System.out(14827): close [socket][/0.0.0.0:53132]
    08-07 13:44:07.532: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
    08-07 13:44:07.532: I/System.out(14827): propertyValue:true
    08-07 13:44:07.533: I/System.out(14827): [socket][5] connection /54.175.219.8:80;LocalPort=38166(10000)
    08-07 13:44:07.533: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
    08-07 13:44:07.534: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80 
    08-07 13:44:07.775: I/System.out(14827): [socket][/192.168.255.220:38166] connected
    08-07 13:44:07.775: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:44:07.775: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
    08-07 13:44:07.776: I/System.out(14827): >doSendRequest
    08-07 13:44:07.776: I/System.out(14827): <doSendRequest
    08-07 13:44:14.022: V/AsyncHttpRH(14827): Progress 241 from 241 (100%)
    <span style="background-color: rgb(204, 204, 204);">08-07 13:44:14.022: I/statuscode:(14827): 200
    08-07 13:44:14.022: I/response:(14827): {
    08-07 13:44:14.022: I/response:(14827):   "args": {}, 
    08-07 13:44:14.022: I/response:(14827):   "data": "", 
    08-07 13:44:14.022: I/response:(14827):   "files": {}, 
    08-07 13:44:14.022: I/response:(14827):   "form": {}, 
    08-07 13:44:14.022: I/response:(14827):   "headers": {
    08-07 13:44:14.022: I/response:(14827):     "Accept-Encoding": "gzip", 
    08-07 13:44:14.022: I/response:(14827):     "Content-Length": "0", 
    08-07 13:44:14.022: I/response:(14827):     "Host": "httpbin.org"
    08-07 13:44:14.022: I/response:(14827):   }, 
    08-07 13:44:14.022: I/response:(14827):   "origin": "222.92.185.206", 
    08-07 13:44:14.022: I/response:(14827):   "url": "http://httpbin.org/delay/6"
    08-07 13:44:14.022: I/response:(14827): }</span>
    08-07 13:45:14.022: D/dalvikvm(14827): threadid=12: exiting
    08-07 13:45:14.022: D/dalvikvm(14827): threadid=12: bye!
    
    もっと試して、リラックスしてください.
    それから複数のリクエストを出して、もう少しでいいです.getWithParamsを3回連続クリックすると、最後の3回の出力が表示されます.
    08-07 13:48:42.202: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:48:42.204: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:48:42.204: D/dalvikvm(14827): create new thread
    08-07 13:48:42.204: D/dalvikvm(14827): new thread created
    08-07 13:48:42.204: D/dalvikvm(14827): update thread list
    08-07 13:48:42.205: D/dalvikvm(14827): threadid=12: interp stack at 0x60d80000
    08-07 13:48:42.205: D/dalvikvm(14827): init ref table
    08-07 13:48:42.205: D/dalvikvm(14827): init mutex
    08-07 13:48:42.205: D/dalvikvm(14827): threadid=12: created from interp
    08-07 13:48:42.205: D/dalvikvm(14827): start new thread
    08-07 13:48:42.206: D/dalvikvm(14827): threadid=12: notify debugger
    08-07 13:48:42.206: D/dalvikvm(14827): threadid=12 (pool-1-thread-7): calling run()
    08-07 13:48:42.207: I/System.out(14827): [CDS]rx timeout:1
    08-07 13:48:42.207: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:42.208: I/System.out(14827): [CDS]close[38166]
    08-07 13:48:42.208: I/System.out(14827): close [socket][/0.0.0.0:38166]
    08-07 13:48:42.210: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
    08-07 13:48:42.210: I/System.out(14827): propertyValue:true
    08-07 13:48:42.214: I/System.out(14827): [socket][6] connection /54.175.219.8:80;LocalPort=49560(10000)
    08-07 13:48:42.214: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
    08-07 13:48:42.215: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80 
    08-07 13:48:42.250: I/View(14827): Touch up dispatch to android.widget.Button{42a2f000 VFED..C. ...p..ID 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=487.2788, y[0]=45.74942, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279671, downTime=487279590, deviceId=3, source=0x1002 }
    08-07 13:48:42.255: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:48:42.257: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:48:42.257: D/dalvikvm(14827): create new thread
    08-07 13:48:42.257: D/dalvikvm(14827): new thread created
    08-07 13:48:42.257: D/dalvikvm(14827): update thread list
    08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: interp stack at 0x60da2000
    08-07 13:48:42.257: D/dalvikvm(14827): init ref table
    08-07 13:48:42.257: D/dalvikvm(14827): init mutex
    08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: created from interp
    08-07 13:48:42.257: D/dalvikvm(14827): start new thread
    08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: notify debugger
    08-07 13:48:42.257: D/dalvikvm(14827): threadid=13 (pool-1-thread-8): calling run()
    08-07 13:48:42.259: I/System.out(14827): [CDS]rx timeout:1
    08-07 13:48:42.259: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:42.259: I/System.out(14827): [CDS]close[53062]
    08-07 13:48:42.260: I/System.out(14827): close [socket][/0.0.0.0:53062]
    08-07 13:48:42.261: I/System.out(14827): [socket][7] connection /54.175.219.8:80;LocalPort=33638(10000)
    08-07 13:48:42.261: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
    08-07 13:48:42.261: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80 
    08-07 13:48:42.327: I/View(14827): Touch down dispatch to android.widget.Button{42a2f000 VFED..C. ......ID 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=483.28436, y[0]=44.750183, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279735, downTime=487279735, deviceId=3, source=0x1002 }
    08-07 13:48:42.411: I/View(14827): Touch up dispatch to android.widget.Button{42a2f000 VFED..C. ...p.... 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=483.28436, y[0]=44.750183, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279829, downTime=487279735, deviceId=3, source=0x1002 }
    08-07 13:48:42.424: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:48:42.428: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:48:42.428: D/dalvikvm(14827): create new thread
    08-07 13:48:42.428: D/dalvikvm(14827): new thread created
    08-07 13:48:42.428: D/dalvikvm(14827): update thread list
    08-07 13:48:42.428: D/dalvikvm(14827): threadid=14: interp stack at 0x60dc4000
    08-07 13:48:42.429: D/dalvikvm(14827): init ref table
    08-07 13:48:42.429: D/dalvikvm(14827): init mutex
    08-07 13:48:42.429: D/dalvikvm(14827): threadid=14: created from interp
    08-07 13:48:42.429: D/dalvikvm(14827): start new thread
    08-07 13:48:42.429: D/dalvikvm(14827): threadid=14: notify debugger
    08-07 13:48:42.429: D/dalvikvm(14827): threadid=14 (pool-1-thread-9): calling run()
    08-07 13:48:42.433: I/System.out(14827): [CDS]rx timeout:1
    08-07 13:48:42.433: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:42.434: I/System.out(14827): [CDS]close[44353]
    08-07 13:48:42.435: I/System.out(14827): close [socket][/0.0.0.0:44353]
    08-07 13:48:42.438: I/System.out(14827): [socket][8] connection /54.175.219.8:80;LocalPort=44408(10000)
    08-07 13:48:42.438: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
    08-07 13:48:42.439: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80 
    08-07 13:48:42.581: I/System.out(14827): [socket][/192.168.255.220:49560] connected
    08-07 13:48:42.581: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:42.581: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
    08-07 13:48:42.586: I/System.out(14827): >doSendRequest
    08-07 13:48:42.589: I/System.out(14827): <doSendRequest
    08-07 13:48:43.603: I/System.out(14827): [socket][/192.168.255.220:33638] connected
    08-07 13:48:43.604: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:43.604: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
    08-07 13:48:43.607: I/System.out(14827): >doSendRequest
    08-07 13:48:43.608: I/System.out(14827): <doSendRequest
    08-07 13:48:43.783: I/System.out(14827): [socket][/192.168.255.220:44408] connected
    08-07 13:48:43.783: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:48:43.783: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
    08-07 13:48:43.786: I/System.out(14827): >doSendRequest
    08-07 13:48:43.787: I/System.out(14827): <doSendRequest
    08-07 13:48:48.936: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
    <span style="background-color: rgb(204, 204, 204);">08-07 13:48:48.937: I/statuscode:(14827): 200
    08-07 13:48:48.939: I/response:(14827): {
    08-07 13:48:48.939: I/response:(14827):   "args": {
    08-07 13:48:48.939: I/response:(14827):     "key1": "v1", 
    08-07 13:48:48.939: I/response:(14827):     "key2": "v2"
    08-07 13:48:48.939: I/response:(14827):   }, 
    08-07 13:48:48.939: I/response:(14827):   "data": "", 
    08-07 13:48:48.939: I/response:(14827):   "files": {}, 
    08-07 13:48:48.939: I/response:(14827):   "form": {}, 
    08-07 13:48:48.939: I/response:(14827):   "headers": {
    08-07 13:48:48.939: I/response:(14827):     "Accept-Encoding": "gzip", 
    08-07 13:48:48.939: I/response:(14827):     "Content-Length": "0", 
    08-07 13:48:48.939: I/response:(14827):     "Host": "httpbin.org"
    08-07 13:48:48.939: I/response:(14827):   }, 
    08-07 13:48:48.939: I/response:(14827):   "origin": "222.92.185.206", 
    08-07 13:48:48.939: I/response:(14827):   "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
    08-07 13:48:48.939: I/response:(14827): }
    08-07 13:48:50.678: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
    08-07 13:48:50.680: I/statuscode:(14827): 200
    08-07 13:48:50.681: I/response:(14827): {
    08-07 13:48:50.681: I/response:(14827):   "args": {
    08-07 13:48:50.681: I/response:(14827):     "key1": "v1", 
    08-07 13:48:50.681: I/response:(14827):     "key2": "v2"
    08-07 13:48:50.681: I/response:(14827):   }, 
    08-07 13:48:50.681: I/response:(14827):   "data": "", 
    08-07 13:48:50.681: I/response:(14827):   "files": {}, 
    08-07 13:48:50.681: I/response:(14827):   "form": {}, 
    08-07 13:48:50.681: I/response:(14827):   "headers": {
    08-07 13:48:50.681: I/response:(14827):     "Accept-Encoding": "gzip", 
    08-07 13:48:50.681: I/response:(14827):     "Content-Length": "0", 
    08-07 13:48:50.681: I/response:(14827):     "Host": "httpbin.org"
    08-07 13:48:50.681: I/response:(14827):   }, 
    08-07 13:48:50.681: I/response:(14827):   "origin": "222.92.185.206", 
    08-07 13:48:50.681: I/response:(14827):   "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
    08-07 13:48:50.681: I/response:(14827): }
    08-07 13:48:50.854: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
    08-07 13:48:50.854: I/statuscode:(14827): 200
    08-07 13:48:50.855: I/response:(14827): {
    08-07 13:48:50.855: I/response:(14827):   "args": {
    08-07 13:48:50.855: I/response:(14827):     "key1": "v1", 
    08-07 13:48:50.855: I/response:(14827):     "key2": "v2"
    08-07 13:48:50.855: I/response:(14827):   }, 
    08-07 13:48:50.855: I/response:(14827):   "data": "", 
    08-07 13:48:50.855: I/response:(14827):   "files": {}, 
    08-07 13:48:50.855: I/response:(14827):   "form": {}, 
    08-07 13:48:50.855: I/response:(14827):   "headers": {
    08-07 13:48:50.855: I/response:(14827):     "Accept-Encoding": "gzip", 
    08-07 13:48:50.855: I/response:(14827):     "Content-Length": "0", 
    08-07 13:48:50.855: I/response:(14827):     "Host": "httpbin.org"
    08-07 13:48:50.855: I/response:(14827):   }, 
    08-07 13:48:50.855: I/response:(14827):   "origin": "222.92.185.206", 
    08-07 13:48:50.855: I/response:(14827):   "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
    08-07 13:48:50.855: I/response:(14827): }</span>
    

    複数のスタンプ、異なるスタンプを押すことができます
    次に面白いことをして、getリクエストを開始し(なぜpostを使わないのか、考えないでください.ただ、ここでget方式でリクエストされたウェブサイトの応答時間が長く、反応に間に合うだけです)、クリックして、プログラムを非フロントにします(backまたはhomeでもいいです).
    logは貼らないで、あなたはlogがやはり得た内容を出力したことを発見することができて、これは私たちがcancelを研究する原因で、結局私たちはactivityを脱退してスタックから削除することはめったにありません.
    リクエストを開始しcancelallすると、このようなlogが見つかります.
    08-07 13:59:52.360: I/View(14827): Touch down dispatch to android.widget.Button{42b54520 VFED..C. ........ 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=178.70735, y[0]=50.821228, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487949780, downTime=487949780, deviceId=3, source=0x1002 }
    08-07 13:59:52.437: I/View(14827): Touch up dispatch to android.widget.Button{42b54520 VFED..C. ...p.... 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=181.7032, y[0]=45.825134, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487949859, downTime=487949780, deviceId=3, source=0x1002 }
    08-07 13:59:52.453: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:59:52.453: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:59:52.453: D/dalvikvm(14827): create new thread
    08-07 13:59:52.453: D/dalvikvm(14827): new thread created
    08-07 13:59:52.453: D/dalvikvm(14827): update thread list
    08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: interp stack at 0x60d90000
    08-07 13:59:52.454: D/dalvikvm(14827): init ref table
    08-07 13:59:52.454: D/dalvikvm(14827): init mutex
    08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: created from interp
    08-07 13:59:52.454: D/dalvikvm(14827): start new thread
    08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: notify debugger
    08-07 13:59:52.454: D/dalvikvm(14827): threadid=12 (pool-1-thread-13): calling run()
    08-07 13:59:52.455: I/System.out(14827): [CDS]rx timeout:1
    08-07 13:59:52.455: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:59:52.455: I/System.out(14827): [CDS]close[60276]
    08-07 13:59:52.455: I/System.out(14827): close [socket][/0.0.0.0:60276]
    08-07 13:59:52.471: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
    08-07 13:59:52.472: I/System.out(14827): propertyValue:true
    08-07 13:59:52.473: I/System.out(14827): [socket][12] connection /54.175.222.246:80;LocalPort=56247(10000)
    08-07 13:59:52.473: I/System.out(14827): [CDS]connect[/54.175.222.246:80] tm:10
    08-07 13:59:52.474: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80 
    08-07 13:59:52.819: I/System.out(14827): [socket][/192.168.255.220:56247] connected
    08-07 13:59:52.819: I/System.out(14827): [CDS]rx timeout:10000
    08-07 13:59:52.819: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
    08-07 13:59:52.820: I/System.out(14827): >doSendRequest
    08-07 13:59:52.821: I/System.out(14827): <doSendRequest
    08-07 13:59:53.411: I/View(14827): Touch down dispatch to android.widget.Button{42b59410 VFED..C. ........ 0,540-656,636 #7f080009 app:id/btn_cancelAll}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=307.52844, y[0]=74.38092, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487950831, downTime=487950831, deviceId=3, source=0x1002 }
    08-07 13:59:53.476: I/View(14827): Touch up dispatch to android.widget.Button{42b59410 VFED..C. ...p.... 0,540-656,636 #7f080009 app:id/btn_cancelAll}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=305.53122, y[0]=68.38562, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487950897, downTime=487950831, deviceId=3, source=0x1002 }
    08-07 13:59:53.483: V/SettingsProviderInterface(14827):  from settings cache , name = sound_effects_enabled , value = 0
    08-07 13:59:53.483: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:59:53.484: D/dalvikvm(14827): create new thread
    08-07 13:59:53.484: D/dalvikvm(14827): new thread created
    08-07 13:59:53.484: D/dalvikvm(14827): update thread list
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: interp stack at 0x60db0000
    08-07 13:59:53.484: D/dalvikvm(14827): init ref table
    08-07 13:59:53.484: D/dalvikvm(14827): init mutex
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: created from interp
    08-07 13:59:53.484: D/dalvikvm(14827): start new thread
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: notify debugger
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13 (Thread-5505): calling run()
    08-07 13:59:53.484: D/dalvikvm(14827): create interp thread : stack size=128KB
    08-07 13:59:53.484: D/dalvikvm(14827): create new thread
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: exiting
    08-07 13:59:53.484: D/dalvikvm(14827): new thread created
    08-07 13:59:53.484: D/dalvikvm(14827): update thread list
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: bye!
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: interp stack at 0x60dd2000
    08-07 13:59:53.484: D/dalvikvm(14827): init ref table
    08-07 13:59:53.484: D/dalvikvm(14827): init mutex
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: created from interp
    08-07 13:59:53.484: D/dalvikvm(14827): start new thread
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: notify debugger
    08-07 13:59:53.484: D/dalvikvm(14827): threadid=13 (Thread-5506): calling run()
    08-07 13:59:53.485: I/System.out(14827): [CDS]close[56247]
    08-07 13:59:53.485: I/System.out(14827): ex:java.net.SocketException: Socket closed
    08-07 13:59:53.485: I/System.out(14827): close [socket][/0.0.0.0:56247]
    08-07 13:59:53.485: I/System.out(14827): close [socket][/0.0.0.0:56247]
    08-07 13:59:53.485: D/dalvikvm(14827): threadid=13: exiting
    08-07 13:59:53.485: D/dalvikvm(14827): threadid=13: bye!
    08-07 13:59:53.485: V/AsyncHttpRH(14827): Request got cancelled
    08-07 13:59:54.987: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
    08-07 13:59:54.987: I/System.out(14827): propertyValue:true
    08-07 13:59:54.987: I/System.out(14827): close [socket][/0.0.0.0:-1]
    
    接続が切断されていることがわかります.要求がキャンセルされました.いくつかの要求を開始してみてください.
    では、saveHandle、cancelrequesthandleをクリックしてみましょう.
    tagをもう一度試してみますが、ここではtagをリフレッシュしていません.
    後記
    この冗長なブログも書き終わりますので、リクエストのキャンセルについてある程度知っておくべきで、いくつかのシーンでコードの中でリクエストのキャンセルを行う意識もあるに違いありません.次は意外にもデータを得た後の処理です.
    本文は作者のオリジナルで、転載して原文の住所を添付して、ありがとうございます!
    原文住所:http://blog.csdn.net/a774057695/article/details/47337547