您的位置:首页 > 移动开发 > Android开发

Android小知识清单(二)

2016-02-22 11:16 736 查看

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在打包时的一些事情

   我们在开发好Android应用后,打包运行的时候,SDK是不会打入apk中的,apk在手机或其它设备上运行的时候会使用手机等设备rom的sdk,比如,不管我们开发打包用的SDK是4.4的,还是4.0的打包,如果运行在2.3的手机上,调用的就是2.3的api。

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值,导致找不到类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: