九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android開發(fā)問題集錦(第三期)
分類: Android

  一、Android線程同步之join方法wait和interrupt

  在Android線程同步處理時如果不考慮并發(fā)庫concurrent使用Java VM的原始方法也可以解決一些簡單情況的線程同步問題。在Android中我們可以使用Java的Thread類的大部分方法,對于等待Sun提供了 join和wait兩個方法,它們的區(qū)別就是前者針對線程為單位的,而wait是釋放一個鎖。當然這里wait的鎖釋放的是相對于join方法而言的,join方法并不需要和synchoronized同時使用,當然讓wait()喚醒的方法我們可以使用Java提供的notify方法,對于所有線程等待可以使用notifyAll方法來處理。

  join()是Thread類的方法,類似的還有sleep(),但對應(yīng)join方法的是interrupt,不過需要注意的是平時使用時需要處理 InterruptException異常。這些均來自Thread類 ,而wait()是java基類對象object的一個方法,同樣對于object基類對象還提供了notify方法。eoe社區(qū)推薦如果大家在Android平臺開發(fā),對于不是復(fù)雜的情況可以考慮AsyncTask解決,當然如果你的Java基礎(chǔ)較好考慮concurrent可以很好的解決各種問題,有關(guān)concurrent的具體使用我們將分10節(jié)來實例說明。


       二、Android Bitmap平移操作如何實現(xiàn)

  有網(wǎng)友問Android系統(tǒng)下如何實現(xiàn)Bitmap向某方向平移操作,有關(guān)圖片旋轉(zhuǎn)操作可以查看 Android游戲開發(fā)之旅十 位圖旋轉(zhuǎn) 這篇,對于平移我們可以通過Canvas類的public void translate (float dx, float dy) 方法來實現(xiàn),參數(shù)一為平面x軸的位置,類型為浮點型,參數(shù)二為y軸的位置。不使用Matrix類,我們可以直接構(gòu)造一個空的Bitmap對象,通過 Canvas類提供的drawBitmap方法畫出我們需要的Bitmap對象,然后調(diào)用translate方法來實現(xiàn)平移,比如將位圖向右平移2個像素,可以為translate(2,0) 而向下移動3個像素translate(0,-3)


      三、如何強制禁用Android的Sensor方向感應(yīng)器

  從Android 1.5開始系統(tǒng)可以設(shè)置Sensor旋轉(zhuǎn)屏幕,如果你的應(yīng)用在部分方面沒有處理好橫屏和豎屏的切換,可能需要強制禁用方向感應(yīng)器Sensor,相關(guān)的方法可以在androidmanifest.xml的相關(guān)activity中加入android:screenOrientation="nosensor" 屬性。

      四、managedQuery和query的區(qū)別-數(shù)據(jù)庫查詢API

  有人問道m(xù)anagedQuery和query的區(qū)別,我們都知道在Android系統(tǒng)中,SQLite數(shù)據(jù)庫的相關(guān)操作方式被封裝為內(nèi)容提供 Content Provider,可以幫助那些不會SQL語言的開發(fā)者快速實現(xiàn)Android平臺上的數(shù)據(jù)庫操作,但是平時我們在查詢時一般返回的是Cursor對象,從本質(zhì)上來看這兩個API是不同的類提供的。eoe社區(qū)提示比如 ContentResolver.query(),以及 Activity.managedQuery()所以,我們看到一個是ContentResolver提供的查詢方法,位于 android.content.ContextWrapper.getContentResolver(),另一個則為Activity。

  這兩種方法的參數(shù)是一樣的,但是Activity類的方法在整個聲明周期中受Activity的影響,而常規(guī)我們處理數(shù)據(jù)邏輯可能單獨分成一個類,直接使用Context對象傳遞實例句柄,同時eoe社區(qū)還建議大家,對于數(shù)據(jù)庫查詢操作如果數(shù)據(jù)較為龐大盡量使用異步的 AsyncQueryHandler方法防止阻塞線程。

      五、EditText的光標選擇

  提起Android的EditText的光標選擇問題,可以通過android.text.Selection包提供的方法來實現(xiàn),Android SDK提供了有關(guān)光標選擇的多種方法,比如說getSelectionEnd、getSelectionStart、removeSelection、 selectAll、setSelection,詳細的參數(shù)聲明如下:
  1. final static int  getSelectionEnd(CharSequence text)
  2. Return the offset of the selection edge or cursor, or -1 if there is no selection or cursor.

  3. final static int  getSelectionStart(CharSequence text)
  4. Return the offset of the selection anchor or cursor, or -1 if there is no selection or cursor.

  5. final static void  removeSelection(Spannable text)
  6. Remove the selection or cursor, if any, from the text.

  7. final static void  selectAll(Spannable text)
  8. Select the entire text.

  9. final static void  setSelection(Spannable text, int index)
  10. Move the cursor to offset index.

  11. static void  setSelection(Spannable text, int start, int stop)
  12. Set the selection anchor to start and the selection edge to stop.
復(fù)制代碼

eoe社區(qū)提示大家,從上面的參數(shù)來看,可以發(fā)現(xiàn)Spannable類型,常規(guī)我們的EditText中的編輯中Editable直接實現(xiàn)Spannable接口,所以我們可以通過下面的方法來設(shè)置選擇:
  1. Editable ea= etEdit.getText();  //etEdit為EditText
復(fù)制代碼

Selection.setSelection(ea, ea.length()-1); // eoe社區(qū)提示這里ea的長度必須大于1,否則會有異常發(fā)生。

      六、SystemClock.sleep和Thread.sleep的區(qū)別

  在Java中我們處理線程同步問題時,處理延遲可能會使用Thread類的sleep方法,這里拋開concurrent類的一些方法,其實Android平臺還提供了一個SystemClock.sleep方法,它們有什么區(qū)別呢?

  我們每次調(diào)用Thread.sleep時可能會出現(xiàn)InterruptedException異常,而SystemClock.sleep方法則不會,在 SDK上有這樣的描述,它將會忽略中斷異常。SystemClock.sleep(millis) is a utility function very similar to Thread.sleep(millis), but it ignores InterruptedException. 這里eoe社區(qū)要提醒的是下面這句 Use this function for delays if you do not use Thread.interrupt(), as it will preserve the interrupted state of the thread.

        七、java.lang.VerifyError錯誤原因

  有網(wǎng)友表示在Android開發(fā)中遇到了java.lang.VerifyError錯誤提示。

  1. 大多數(shù)可能引用的外部jar文件出現(xiàn)了問題,比如說package的路徑產(chǎn)生了問題,但該類被class文件定義了。

  2. 調(diào)用了一些編譯器產(chǎn)生異議的問題,可能是使用的sdk版本不同,但源代碼是一些更老版本的定義。

       八、Uri中的參數(shù)問題

  相比之下部分剛剛入門Android的開發(fā)者可能會發(fā)現(xiàn) Uri.parse()的參數(shù)前面加了file://,其實顧名思義Uri類似Url是Universal Resource Identifier的全稱,開頭必須是協(xié)議名,比如我們web服務(wù)為http://,文件服務(wù)為ftp://,而文件系統(tǒng)則為file://開頭,其實 Android內(nèi)部很多地方都是這樣的定義,比如SQLite的Provider均為content://一樣。所以加上路徑,Uri.parse的參數(shù)為file:///sdcard/cwj.apk

      九、APK文件安裝代碼實現(xiàn)

  很多網(wǎng)友可能需要自己下載APK并實現(xiàn)安裝,這里說下早期的APK安裝器中的APK文件安裝代碼實現(xiàn),其實整個實現(xiàn)比較簡單,但可以清晰說明Android平臺的隱式Intent。在系統(tǒng)安裝的底層常規(guī)的應(yīng)用通過系統(tǒng)服務(wù)PackageInstaller來識別程序安裝的Intent 來執(zhí)行安裝。
  1. Intent intent = new Intent(Intent.ACTION_VIEW);
  2.   intent.setDataAndType(Uri.parse("file://"+ "/sdcard/android123.com/cwj.apk","application/vnd.android.package-archive");
  3.   startActivity(intent);
復(fù)制代碼

  PackageInstaller服務(wù)將會在內(nèi)部匹配MIME類型為application/vnd.android.package-archive的 Intent,要說明的是setDataAndType的參數(shù)第一個為URI,其實URI內(nèi)部的String對應(yīng)為file://加上常規(guī)的路徑,當然其他的Uri構(gòu)造方法還可以Uri.fromFile(new File(sfileFullPath))。

      十、Android Zip解壓縮類處理中文名亂碼

  目前Android平臺上的底層庫仍然有很多不完善的地方比如zlib庫處理Zip文件時無法對中文文件名做正確的處理,同時無法類似J2SE那樣的android.util.zip類沒有setEncoding方法處理。目前解決方法是引入apache的ant庫來實現(xiàn)解壓縮,同時apache ant庫好包含了完整的xml dom4j解析庫可以實現(xiàn)document的保存。

  當然引入apache ant庫的問題是造成程序編譯后體積變得臃腫,算法因為是java寫的效率上會大打折扣,但是解決下問題還是可以的,重量級處理還是放到服務(wù)器上比較好。

  目前總體來看Android平臺底層庫很多地方做的不近人如意,很多關(guān)鍵地方都出現(xiàn)了問題。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android 中的 ManagedQuery()
Android開發(fā)性能優(yōu)化大總結(jié)
android sqlite
Android TextView設(shè)置字體風格
如何修改TextView鏈接點擊實現(xiàn)
總結(jié)Content Provider的使用
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服