Android,android官網

來源:互聯網
上載者:User

Android,android官網

目錄                                                                                  

自訂兩個View進行畫圖,讓其各自重新整理重繪                                      

我將螢幕分為左右兩部分,並且自訂了繪圖類drawOneView和drawTwoView,它們都繼承View類,其中drawOneView在螢幕左邊顯示,drawTwoView在右邊顯示,在drawOneView中能夠通過invalidate()函數,使其重繪,但是在drawTwoView中就不能通過invalidate()函數使drawTwoView進行重繪了,這是為什麼呢?並且當drawOneView進行重繪的時候,怎麼也會帶動drawTwoView重繪,它們應該是分別由各自的類進行控制的,為什麼會出現這種情況呢?

一個用Invalidate(),另外一個用postInvalidate()就可以重新整理了

就是在你需要重新整理UI的地方分別調用Invalidate(),postInvalidate()就可以了。

Activity設為singleTop,長按Home鍵啟動的問題                                    

若將Activity設定為singleTop的,則,按Home鍵之後,再長按啟動時候,Home鍵的啟動機制裡面,好像會重新啟動被設定為singleTop的Activity,儘管你的singleTop的Activity已經finish或者整個程式已經結束了。

目前的解決辦法是:做標記,然後在被設定為singleTop的Activity裡做攔截。

Android軟鍵盤擋住介面                                                              

AndroidManifest.xml 中設定 
android:windowSoftInputMode="stateUnspecified|adjustPan"
不擠壓螢幕,反之為把介面擠壓上去。
<activity android:name=".activity.MainTabActivity" android:theme="@android:style/Theme.NoTitleBar"            android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait"            android:launchMode="singleTask" android:windowSoftInputMode="stateUnspecified|adjustPan"></activity>
需要注意的是:如果是TabActivity裡面的一個Activity有EditText有軟鍵盤彈出的時候,在該Activity設定沒有作用,需要在TabActivity裡設定。

Android使用AsyncTask下載圖片,最好使用WeakReference                      

有些人喜歡用Android提供的AsyncTask,但事實上AsyncTask的問題更加嚴重,Thread只有在run函數不結束時才出現這種記憶體泄露問題,然而AsyncTask內部的實現機制是運用了ThreadPoolExcutor,該類產生的Thread對象的生命週期是不確定的,是應用程式無法控制的,因此如果AsyncTask作為Activity的內部類,就更容易出現記憶體泄露的問題。

這種線程導致的記憶體泄露問題應該如何解決呢?

第一、將線程的內部類,改為靜態內部類。

第二、線上程內部採用弱引用儲存Context引用。

解決的模型如下:

public abstract class WeakAsyncTask<Params, Progress, Result, WeakTarget> extends          AsyncTask<Params, Progress, Result> {      protected WeakReference<WeakTarget> mTarget;        public WeakAsyncTask(WeakTarget target) {          mTarget = new WeakReference<WeakTarget>(target);      }        /** {@inheritDoc} */      @Override      protected final void onPreExecute() {          final WeakTarget target = mTarget.get();          if (target != null) {              this.onPreExecute(target);          }      }        /** {@inheritDoc} */      @Override      protected final Result doInBackground(Params... params) {          final WeakTarget target = mTarget.get();          if (target != null) {              return this.doInBackground(target, params);          } else {              return null;          }      }        /** {@inheritDoc} */      @Override      protected final void onPostExecute(Result result) {          final WeakTarget target = mTarget.get();          if (target != null) {              this.onPostExecute(target, result);          }      }        protected void onPreExecute(WeakTarget target) {          // No default action      }        protected abstract Result doInBackground(WeakTarget target, Params... params);        protected void onPostExecute(WeakTarget target, Result result) {          // No default action      }  }

Android webview 載入網路視頻                                                     

webView.loadUrl(video_url);webView.setInitialScale(50);WebSettings setting = webView.getSettings();setting.setUseWideViewPort(true);        setting.setJavaScriptEnabled(true); //Support JavaScript        setting.setPluginsEnabled(true); //Support Plugins, for example just like flash plugin.        setting.setSupportZoom(true); //Zoom Control on web (You don't need this if ROM supports Multi-Touch          setting.setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM                webView.setWebViewClient(new MyWebViewClient());public class MyWebViewClient extends WebViewClient  {      private ProgressDialog loadingBar;@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {    loadingBar=ProgressDialog.show(mActivity, null, "正在載入…");    super.onPageStarted(view, url, favicon);}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {        view.loadUrl(url);  // webview裡面的連結還在同一個頁面中載入         return true;  }@Overridepublic void onPageFinished(WebView view, String url) {    if(loadingBar.isShowing()){        loadingBar.dismiss();    }    super.onPageFinished(view, url);}           @Overridepublic void onReceivedError(WebView view, int errorCode,               String description, String failingUrl) {    Toast.makeText(mActivity, "載入出錯!", Toast.LENGTH_LONG).show();    final AlertDialog alertDialog = new AlertDialog.Builder(mActivity).create();    alertDialog.setTitle("ERROR");    alertDialog.setMessage(description);    alertDialog.setButton("OK", new DialogInterface.OnClickListener(){        @Override        public void onClick(DialogInterface dialog, int which) {             alertDialog.dismiss();        }    });     alertDialog.show();}}

Android 開發中的網路下載策略 與 檔案快取策略                                 

一般的緩衝策略是:
一級記憶體緩衝、二級檔案快取(資料庫也算作檔案快取)、三級網路資料

一、網路下載的緩衝策略
關於網路下載檔案(圖片、音頻、視頻)的基本策略:
1.不要直接下載到目標檔案,應使用temp檔案作中轉,以確保檔案的正確性與完整性,流程如下:
a)以網路目標檔案名 A 產生唯一的本地目標檔案名 B
b)以本地目標檔案名 B 產生唯一的本地臨時檔案名稱 T
c)下載檔案到 T 中
d)下載完畢,校正檔案 T 的正確性與完整性
e)若不正確或不完整則 delete 檔案 T,並返回 false
f)校正完畢後,將檔案 T 重新命名 或 複製到 B 檔案
g)最後的清理現場,刪除臨時檔案 T,成功後,返回 true
2.儘力提供檔案正確性與完整性的校正:
a)正確性:比如 MD5/Hash Code 比對、檔案格式的比對。
b)完整性:比如 檔案大小是否一致、圖片的資料是否正確(圖片檔案頭中提供了相關資訊)
3.考慮對於下載到本地的檔案是否需要再做二次加工,可以思考以下情況:
a)比如網路源始圖片的大小為800*600,而我們需要作為縮圖的大小為160*145,所以考慮對下載後的檔案進行裁剪,再儲存,對於源始檔案則直接刪除。

二、檔案快取策略:
1.需要唯一的快取檔案的對應I/O key,一般可以使用 hashcode。
2.若是同一個檔案,以不同的時間,可以考慮,先清本機快取,再下載新的緩衝到本地。
3.同一檔案也可以加上時間戳記後,再產生唯一hashcode。
4.組建檔案緩時,也許需要作以下全面的考慮:

a)sdcard是否已經沒有空間(這個需求是存在的,但幾乎沒有人會考慮到,一旦發生,必crash)。
b)緩衝的清理策略。每日、每周定時清理?到達一個閥值後,自動清理?(若無清理策略,把垃圾資料一直當個寶一相存著,是很SB的)。
c)緩衝真正需要的資料。不要覺外存是無限的,所以就可以什麼都存,要知道,多則繁,繁則亂。曾經有一同事,每天存幾百MB的使用者資料(所有使用者的性別、age、連絡方式等等),而PM需要的只是一個每日數戶的活躍資料報表,於是最後改為緩衝每天的使用者分析報表資料即可(才10幾KB)。
d)給快取檔案加密。最簡單就是去掉檔案的副檔名,這也算加密,當然,你可以把服務端檔案加密,然後在記憶體中解密。這就看項目的需求而定,我的經驗也不足,一般就是改改副檔名之類的。

三、記憶體緩衝策略
記憶體緩衝策略是為了應對更加高效的緩衝,對於不是頻煩更新的檔案資料,就可以緩衝在記憶體中,但是有以下注意事項:

a)記憶體的I/O,弱引用。弱引用可以讓JVM更加合理、自主的回收。
b)記憶體緩衝的 key 也必須唯一,可以參考檔案快取 key 策略。
c)提供一個記憶體緩衝重新整理的介面。雖然記憶體緩衝本身的生命週期就較短,但它必竟是最上層的使用者資料,所以設計時提供一個UI重新整理介面,是可以考慮的。

Android中ListView的addFooterView不顯示的問題                                 

mListView.addFooterView(btn_more, null, false);mListView.setAdapter(mBlogListAdapter);

把addFootView放在setAdapter之前就可解決。

Android自動彈出軟鍵盤                                                              

在onCreate中加入:

// 自動調出軟鍵盤Timer timer = new Timer();timer.schedule(new TimerTask() {    @Override    public void run() {        ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);    }}, 200);

我是天王蓋地虎的分割線                                                             

 


android是什

android就是機器人的意思 android手機就是使用安卓系統的手機,由Google開發出來的 和一般智能手機差不多 不知道你說的普通手機是什麼意思 android手機能夠多
 
android是什

android就是機器人的意思 android手機就是使用安卓系統的手機,由Google開發出來的 和一般智能手機差不多 不知道你說的普通手機是什麼意思 android手機能夠多
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.