日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android(java)学习笔记144:网络图片浏览器的实现(ANR)

發布時間:2023/12/18 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android(java)学习笔记144:网络图片浏览器的实现(ANR) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.我們在Android下,實現使用http協議進行網絡通信,請求網絡數據。這里是獲取網絡上的圖片信息,讓它可以顯示在手機上;

但是我們這個手機連接網絡是很費時間,如果我們在主線程(UI線程)中寫這個網絡連接的邏輯,這是很容易報一個錯誤:android.os.NetworkOnMainThreadException(Android4.0之后引入的異常)

主線程很重要,它負責監聽系統的各種事件,如果主線程在一段時間內沒有響應,系統就會這個應用程序無響應,就會產生ANR的異常。下面有必要說明一下這個ANR異常

2.ANRs ("Application Not Responding"),意思是"應用沒有響應".

在如下情況下,Android會報出ANR錯誤:
?主線程 ("事件處理線程"/ "UI線程") 在5秒內沒有響應輸入事件.
??BroadcastReceiver 沒有在10秒內完成返回.

通常情況下,下面這些做法會導致ANR:
(1).在主線程內進行網絡操作
(2).在主線程內進行一些緩慢的磁盤操作(例如執行沒有優化過的SQL查詢)

應用應該在5秒或者10秒內響應,否則用戶會覺得“這個應用很垃圾”“爛”“慢”…等等

邏輯應該是:
(1). new出一個新的線程,進行數據請求.
(2). 獲取數據后,調用handler.sendMessage方法.

(3). 在handler的handle()方法中更新UI.

案例:

activity_main.xml

1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <Button 8 android:onClick="click" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:layout_centerHorizontal="true" 12 android:layout_centerVertical="true" 13 android:text="點我" /> 14 15 </RelativeLayout>

MainActivity.java

package com.itheima.anr;import android.app.Activity; import android.os.Bundle; import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void click(View view){try {System.out.println(Thread.currentThread().getName());Thread.sleep(6000);//當前線程。 } catch (InterruptedException e) {e.printStackTrace();}}}

這里的Thread.sleep(6000),這里的表示Thread線程是Main線程,也就是UI主線程,我們之前說過了UI主線程在5s不能響應,系統就會認為這個應用程序是不響應的。這里6s>5s,所以會報錯ANRs ("Application Not Responding")

?

3.前面說了這么多,也就是說了關于在Android下進行網絡連接注意事項,網絡連接是耗時程序代碼:下面開始實現網絡圖片瀏覽器程序:

MainActivity.java:

package com.itheima.netimageviewer;import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.text.TextUtils; import android.util.Base64; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast;public class MainActivity extends Activity {private EditText et_path;private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);iv = (ImageView) findViewById(R.id.iv);}/*** 點擊查看網絡上的圖片* * @param view*/public void click(View view) {String path = et_path.getText().toString().trim();// http://www.baidu.com/aa.pngif (TextUtils.isEmpty(path)) {Toast.makeText(this, "圖片路徑不能為空", 0).show();return;}//把文件名編碼之后+緩沖的路徑變成file文件File file = new File(getCacheDir(), Base64.encodeToString(path.getBytes(), Base64.DEFAULT));if (file.exists() && file.length() > 0) {System.out.println("圖片存在,拿緩存");Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());iv.setImageBitmap(bitmap);} else {System.out.println("圖片不存在,獲取數據生成緩存");// 通過http請求把圖片獲取下來。try {// 1.聲明訪問的路徑, url 網絡資源 http ftp rtspURL url = new URL(path);// 2.通過路徑得到一個連接 http的連接HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 3.判斷服務器給我們返回的狀態信息。// 200 成功 302 重定向 404資源沒找到 5xx 服務器內部錯誤int code = conn.getResponseCode();if (code == 200) {//這個流是用來接收圖片的InputStream is = conn.getInputStream();// png的圖片//這個輸出流是吧圖片寫入安卓系統的儲存區的FileOutputStream fos = new FileOutputStream(file);//讀寫操作byte[] buffer = new byte[1024];int len = -1;while ((len = is.read(buffer)) != -1) {fos.write(buffer, 0, len);}is.close();fos.close();//通過圖片工廠來獲取文件路徑, 然后變成圖片傳遞給控件Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());iv.setImageBitmap(bitmap);} else {// 請求失敗Toast.makeText(this, "請求失敗", 0).show();}} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "發生異常,請求失敗", 0).show();}}} }

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><EditTextandroid:text="http://www.baidu.com/img/bd_logo1.png"android:id="@+id/et_path"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="請輸入網絡圖片的路徑" /><Buttonandroid:onClick="click"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="查看" /><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.himi.webpicturewatch"android:versionCode="1"android:versionName="1.0" ><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-sdkandroid:minSdkVersion="15"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

?

轉載于:https://www.cnblogs.com/hebao0514/p/4767538.html

總結

以上是生活随笔為你收集整理的Android(java)学习笔记144:网络图片浏览器的实现(ANR)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性少妇bbw张开 | 国产精品啪啪啪视频 | 亚洲午夜精品久久久久久app | 日本大尺度做爰呻吟舌吻 | 污动漫网站| 久久影院一区二区 | 日本黄色三级网站 | h网站免费在线观看 | 天天想你免费观看完整版高清电影 | 66av欧美| 在线午夜 | 日韩欧美在线一区二区 | 红桃视频国产 | 日韩一级伦理片 | 日韩免费影视 | 天堂在线视频免费观看 | 最新91视频 | 欧美视频a | 天天爽网站 | 国产二级片 | 亚洲九九爱 | 最新天堂中文在线 | 黄色工厂在线观看 | 4438x全国最大成人 | 在线黄色av | 日韩视频免费在线 | 182在线视频 | 看了下面会湿的视频 | 欧美比基尼 | 超级碰在线视频 | 91久色| 日本精品视频在线播放 | 黄色免费在线网站 | 丁香花高清在线 | 久久久久香蕉 | 亚洲免费观看高清完整版在线 | 51成人网 | 日韩性网站 | 一级片黄色片 | 日韩欧美视频二区 | 国产粉嫩呻吟一区二区三区 | 嫩草一二三 | 成人免费xxxxxx视频 | 国产一级视频在线播放 | 欧美freesex黑人又粗又大 | 色戒av| 国产精品视频久久久久 | 色欲av无码精品一区 | 丁香激情六月 | 一级特黄免费视频 | 亚洲图片欧美激情 | 右手影院亚洲欧美 | 亚洲综合涩 | 国产激情一区 | 最近中文字幕在线mv视频在线 | 18视频在线观看男男 | 亚洲成人av免费观看 | 秋霞午夜鲁丝一区二区 | 午夜小网站| 在线网站黄 | 91桃色视频在线观看 | 精品成在人线av无码免费看 | 亚洲欧美一区在线 | 亚州精品毛片 | 国产91在线播放九色 | 欧美精品一二三四 | 日韩jizz| 国产一级一片免费播放 | 亚洲图片激情小说 | 国产精品36p| 亚洲影音| 天堂中文在线最新 | 深夜在线视频 | 黄色av观看 | 精品国产91久久久久久久妲己 | h在线| 性农村xxxxx小树林 | 亚洲综合在线成人 | 国产精久 | 国产精品高潮AV无码 | 伦伦影院午夜理伦片 | 91免费视频观看 | 牲欲强的熟妇农村老妇女视频 | 欧美一区二区人人喊爽 | 黄色免费在线网站 | eeuss鲁丝片一区二区三区 | 国产精品偷伦视频免费看 | 中文字幕第23页 | 宅宅少妇无码 | 人人射| 日韩有码在线视频 | 国产精品无码一区二区三区 | 精品无码久久久久久久久果冻 | 奇米狠狠 | 性猛交ⅹxxx富婆video | youjizzcom日本 | 欧美高清大白屁股ass18 | 97视频国产 | 日本青草视频 |