国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
android.os.NetworkOnMainThreadException的解決方案

06-24 18:04:36.857: E/AndroidRuntime(22251): FATAL EXCEPTION: main
06-24 18:04:36.857: E/AndroidRuntime(22251): android.os.NetworkOnMainThreadException
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at libcore.io.IoBridge.sendto(IoBridge.java:473)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at java.net.DatagramSocket.send(DatagramSocket.java:284)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at com.example.com.ihome.bang.util.UdpHelper.send(UdpHelper.java:93)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at com.example.com.ihome.bang.adapter.ListViewAdapter$2.onClick(ListViewAdapter.java:210)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.view.View.performClick(View.java:4171)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.view.View$PerformClick.run(View.java:17070)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.os.Handler.handleCallback(Handler.java:615)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.os.Looper.loop(Looper.java:137)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at android.app.ActivityThread.main(ActivityThread.java:4797)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at java.lang.reflect.Method.invokeNative(Native Method)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at java.lang.reflect.Method.invoke(Method.java:511)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
06-24 18:04:36.857: E/AndroidRuntime(22251):     at dalvik.system.NativeStart.main(Native Method)

原來在Android2.2上面運(yùn)行的好好的一個(gè)網(wǎng)絡(luò)應(yīng)用程序,主要是發(fā)送UDP信息跟服務(wù)器進(jìn)行通信的程序,安裝到4.0上面就爆出了這個(gè)問題。

查了一下官方文檔。文檔上說:NetworkOnMainThreadException是因?yàn)閼?yīng)用程序在主線程上嘗試網(wǎng)絡(luò)操作。另外,這個(gè)異常在Honeycomb SDK或更高版本的SDK上才會拋出。低版本的SDK允許應(yīng)用程序在主線程或loop線程執(zhí)行網(wǎng)絡(luò)操作,但不鼓勵(lì)這樣做。

 

方法1:我們可以把a(bǔ)ndroid:targetSdkVersion=”Version Num”這句話從AndroidManifest.xml去掉,問題就解決了,但不是治本的解決方案。(如下圖所示)

方法2:在進(jìn)行網(wǎng)絡(luò)通信的部分,單獨(dú)執(zhí)行異步任務(wù)。

現(xiàn)在讓我們思考一下,讓原有代碼修改最小的一種方法。如果程序?qū)?shí)時(shí)性的要求不是很高的話,我們可以創(chuàng)建一個(gè)異步任務(wù)類,這個(gè)異步任務(wù)類里面含有一個(gè)網(wǎng)絡(luò)消息隊(duì)列(Queue)。這個(gè)類通過對外提供一個(gè)消息入隊(duì)列的接口,在異步類內(nèi)部進(jìn)行消息的發(fā)送。當(dāng)要發(fā)送消息的時(shí)候(也就是原來進(jìn)行網(wǎng)絡(luò)操作的地方,我們假設(shè)是發(fā)送消息),我們將網(wǎng)絡(luò)消息加入Queue,在異步任務(wù)里面用一個(gè)while循環(huán)查詢Queue,當(dāng)Queue中有數(shù)據(jù)的時(shí)候就進(jìn)行發(fā)送,沒有的話,sleep一段時(shí)間。具體的代碼如下所示。

package com.example.com.ihome.bang.tool;import java.util.LinkedList;import java.util.Queue;import com.example.com.ihome.bang.util.UdpHelper;import android.os.AsyncTask;import android.util.Log;public class SendThread extends AsyncTask{    private static Queue<String> queue = new LinkedList<String>();      public static Boolean SendOrder(String Order){        queue.offer(Order);        return true;    }            @Override    protected Object doInBackground(Object... params) {        String str;        while (true) {            //Log.d(SendThread.class.getName(), "進(jìn)入doInBackground");            if ((str = queue.poll()) != null) {                //Log.d(SendThread.class.getName(), "doInBackground_發(fā)送"+str);                UdpHelper.sendReally(str);                try {                    Thread.sleep(100);                } catch (InterruptedException e) {                                        e.printStackTrace();                                    }            }                    }    }}

方法3:在進(jìn)行網(wǎng)絡(luò)通信的部分,用后臺線程來執(zhí)行操作

自己創(chuàng)建線程的話,比創(chuàng)建異步任務(wù)更麻煩一點(diǎn)。記住,當(dāng)你要用線程來處理網(wǎng)絡(luò)通信部分的時(shí)候,記得將線程設(shè)置為后臺運(yùn)行,也就是通過設(shè)置線程的屬性為”background”。我們可以通過傳遞參數(shù) THREAD_PRIORITY_BACKGROUNDProcess.setThreadPriority() 。.如果我們不通過這種方法將線程的優(yōu)先級設(shè)為較低級別的話,那么這個(gè)線程就會擁有跟UI線程一樣的優(yōu)先級,我們的應(yīng)用程序就可能被這個(gè)線程拖慢。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android之a(chǎn)ndroid.os.NetworkOnMainThreadException異常
android.os.NetworkOnMainThreadException 異常處理
android調(diào)試出現(xiàn)E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:
解決android.os.NetworkOnMainThreadException
深入理解Android系統(tǒng)第一彈
【轉(zhuǎn)】關(guān)于android需要用到高版本api導(dǎo)致低版本手機(jī)出現(xiàn)VerifyError的問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服