1、Toast的另一種用法
Toast我們通常用來提示文字,但是也可以用來顯示整個View來顯示,如下:
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.FILL, 0, 0);
toast.setView(toastView);
toast.show();
2、自定義View時的初始化操作
自定義View的時候典型的就是畫筆初始化,包括Paint創建和顏色、粗細等屬性設置什麼的一般只需要在第一次創建初始化就好,通常就是在構造器中初始化,不要在onDraw中去構造,因爲很多情況下onDraw會被多次執行,比如調用了invalidate方法。
3、Adapter數據變化時我們如何監聽?
有時候當Adapter或者Cursor的數據有變化時我們需要作一些操作該怎麼辦?我們可以使用DataSetObserver觀察者模式來實現監聽。繼承DataSetObserver此類重寫onChanged()和onInvalidated()方法,然後用mAdapter來registerDataSetObserver(···)即可。當然,也只有當調用了mAdapter.notifyDataSetChanged();後我們的觀察者才知道數據變化了,纔會執行onCHanged()。
4、在將class文件編譯爲h頭文件時的一些問題。
(1)通常情況下我們在編譯的時候直接用javah即可:javah com.geo.bitmap.BitmapHelper
(2)有時候會出現Android SDK的系統類找不到的情況:找不到類android.graphics.Bitmap。這時候我們就需要這樣的命令:javah -d jni -classpath E:\adt\sdk\platforms\android-17\android.jar; com.geo.bitmap.BitmapHelper,一定要注意在android.jar後面除了有一個分後還有一個空格!
5、關於app在打包時的一些事情
6、關於TextView文本內容過長的問題。
有時候TextView需要把很長的文本內容顯示出來,會出現最後一行文本被截斷不顯示。解決方法是在此TextView中加上android:gravity="bottom",如果還不行就試試top?7、TextView的屬性導致ListView的onItemClick()單擊事件無效!
在ListView的item佈局中對TextView設置了一個textIsSelectable=true屬性,結果就導致了ListView的單擊事件不響應!那個屬性是TextView粘貼複製效果的,目前我的解決方案是去掉該屬性,暫時不知道爲何會影響到ListView的onItemClick()事件的回調,有待調查!8、關於應用在後臺執行被系統回收的問題。
今天測試同事提出的bug說我們的應用在登陸成功後按home鍵然後使用其它app,過一會再進入我們的app就發現又需要登錄!初步懷疑是我們的應用被系統清理回收了,由於內存不足和耗電量高,於是就先讓客戶在設置裏將應用設置爲受保護的後臺應用,也就是不讓系統清理我哦們的應用,。關於內存的檢測看:http://stackoverflow.com/questions/2298208/how-do-i-discover-memory-usage-of-my-application-in-android/2299813#2299813;
9、Sqlite在插入時返回-1
今天在數據庫insert()操作的時候老是返回-1值,表明一直插入失敗,後來調查發現實因爲在創建表的時候有個語句是這樣寫的:nid varchar primary key。其中nid是我表的一個字段,Sqlite數據庫會將integer primary key的語句解析爲自動增長,由於此nid是varchar且我在插入的時候還給nid賦值了,所以出錯,可以將varchar改爲integer類型,再插入時讓它自動增長。這是語句是失誤了!。
10、使用Service防止在低內存時應用被kill。
我們可以在Service的onCreate()中調用this.startForeground(100, notification);然後在onDestory()中調用stopForeground(boolnean)就可以讓我們的服務在前臺運行了。
11、如何根據Graphic的範圍獲取中心點?(ArcGIS)
Point point = GeometryEngine.getLabelPointForPolygon((Polygon) graphic.getGeometry(), mMapView.getSpatialReference());
12、應用在啓動時會白一下然後在進入引導界面解決
其實這是因爲在應用啓動時Window的背景,我們在樣式中去掉這個背景,即讓他透明即可。
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
13、Toolbar在4.4系統上顯示正常,但是在5.0+上Toolbar會和狀態欄重疊
解決辦法,加上android:fitsSystemWindows=“true”還是不起作用,後來把根佈局CoordinatorLayout換成線性佈局就可以了,所以,記得以後不要用CoordinatorLayout佈局,雖然這是一個ViewGroup,但是其內部原理還不是很清楚。
14、在AndroidStudio中,使用ImageLoader出現ClassNotDefFoundError錯誤,後來發現時由於使用了分包,但是又是自己定義的Application,所以重寫以下代碼就解決了:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
15、AndroidStudio運行項目得好長時間,而且出現OOM,如下:java.lang.OutOfMemoryError: GC overhead limit exceeded,解決辦法就是在app的gralde的android{}模塊添加如下代碼:
dexOptions {
javaMaxHeapSize "4g"
}
16、使用AndroidStudio將一個Module打包成jar包
首先在Module的gralde中編寫:
task makeJar(type: Copy) {
delete 'build/libs/mpchart.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'mpchart.jar')
}
makeJar.dependsOn(build)
然後打開AS的Terminal執行gradlew makeJar命令即可。
17、在Android 7.0上,ClassNotFound奇葩異常
明明已經註冊了Activity,但是還是報找不到類,後來發現是註冊的時候有兩個一樣的label值,導致找不到類。