Android总结(2012.07.08)
2015-09-23 12:36
489 查看
0.不要创建不需要的对象
1.除非创建API,否则使用HashMap而不是map
2.不改变逻辑的情况下能静态的静态
3.避免内部的getter/setter方法
4.Constants中使用static final变量
5.loog要比For循环速度快
6.Consider Package Instead of Private Access with Private Inner Classes
7.谨慎使用浮点型
8.让键盘没有黑色背影 设置SoftInputMode 为ADJUST_PAN
==================================以下为别人整理=========================================
1:Android Permission denied(不允许连接Socket) 错误
原因是: 需要访问到网络,所以,在AndroidManifest.xml中,需要进行如下配置:
2:ListView滚动变黑解决方法
ListView增加一个属性android:cacheColorHint=”#00000000”
3:Item用自己的背景盖住了Selector光标
ListView增加一个属性:android:drawSelectorOnTop=”true”这样光标就会跑到Item上面的图层
4:在利用Tab标签(自定义按钮)实现不同Activity切换,不同Activity均已经设置了模式为singleTask或singleInstance时,但是每次点击Tab标签中的特定Activity时,每次都还是会执行
onCreate方法,原因如下:
1:管理Tab标签(实现Activity切换的Tab标签)的容器(Activity)必须继承ActivityGroup
2:Activity设置的启动模式必须为singleTask或singleInstance
3:LocalActivityManager中的startActivity方法对于的Activity对应的ID,必须为需要跳转过去的Activity名称,否则失效。
4:存放tab标签(自定义按钮)对应的layout中必须有一个FrameLayout放置子activity。
5:模拟器提示访问网络出现如下异常:
java.net.UnknownHostException: Host is unresolved
原因是模拟器没有开通代理访问网络。
6:开发过程中,当listview控件中有button、checkbox等控件时,可能是由于这些子控件中获取到了focus事件,导致listview中onItemClick事件失效,只需要按如下方式处理即可:
1)每一个控件重新设置focusable属性
2)Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可
7:开发自定义控件步骤
1)创建res/values
private void setListViewPositon(ListView sourceListView, ListView desListView)
{
if (null != sourceListView && null != desListView)
{
int[] location = new int[2];
if (0 == listViewYLocation)
{
//获取该VIEW控件相对于手机屏幕的绝对坐标位置
desListView.getLocationOnScreen(location);
listViewYLocation = location[1];
}
63:
64:Listview特别之处:
1)由于listivew删除头部的前提条件是1)header先要add至listview;2)listview.setAdapter,再可以remove头部
2)如果需要做listview整体上移动作,而listview顶部右一个布局问题,需要实现listivew上移动画是在该布局的下面完成,由于listivew整体移动时依据以其父布局文件,
故而listivew一定要控制在其父布局下面即可。
3)如果listview执行上移动画时,底部会出现空白区域,解决思路可以尝试对包含Listview的容器截图,对图片进行移动。
titleLayout.setDrawingCacheEnabled(true);
titleLayout.buildDrawingCache();
Bitmap bitmap = titleLayout.getDrawingCache();
animationImageView.setImageBitmap(bitmap);
animationImageView.setVisibility(View.VISIBLE);
titleLayout.setVisibility(View.INVISIBLE);
65:旋转动画,如果出现没有按照中心点运行,可能的原因就是布局问题。
66:如果需要做在指定的时间内容界面无任何操作,执行某个动作,可以通过发送延时Handle。
67:动画执行和Ui操作不同步时,导致的原因可能是布局文件的层次结构导致。
68:如果布局需要实现上下两层的话,可以通过RelativeLayout实现,同时最上面的布局,应该放置在布局文件的最底部
69:如果view设置成View.INVISIBLE后,未生效,可能的原因
1)布局的问题
2)view是否设置了setFillAfter(true);
70:Android客户端布局文件中的每个空间的位置如果相对于布局本身不动的话,则离左边、右边、上边、下边都是为0,所以大家在理解布局文件的的元素布局是一定要搞清楚,为0的意思不是在手机最顶部的原点位置,切记!
71:性能优化和体验优化总结
1)如果在支持比较费时的操作且需要用户立刻显示界面时,可以采用AsynTask、发送延时Handler、Thread等。
72:Application ‘com.hotalk’ has its ‘debuggable’ attribute set to FALSE and cannot be debugged.
是由于AndroidManifest.xml文件中的Application中设置了debug模式.
73:如果运行eclipse时,出现ADB server didn’t ACK * failed to start daemon * error: unknown host service问题,且通过重启adb、eclipse、升级adt,都无效时,可以考虑如下:
1)到任务栏清除ADB.exe
2)关闭PC上面的手机连接助手工具进程。
3)重启adb
74:Android 实现Activity后台运行
第一种方法
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
第二种方法:此方法其实不是主要是屏蔽Keycode_Back,让它不结束(finish())Activity,直接显示HOME界面。
PackageManager pm = getPackageManager();
ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), 0);
if (keyCode == KeyEvent.KEYCODE_BACK)
{
ActivityInfo ai = homeInfo.activityInfo;
Intent startIntent = new Intent(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.setComponent(new ComponentName(ai.packageName,
ai.name));
startActivitySafely(startIntent);
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
75:解决出现ANR问题的部分技术细节
1)错误的使用SQLiteDatabase事物,需要捕获潜在的异常,不要因为未调用的transExecSQL中的endTransaction方法,导致30秒异常
2)重复Handler注册和发送信息
76:eclipse启动日志中出现如下异常: * java list.cache’ not found.
解决方法:删除eclipse对应workspace下面的.metadata文件夹
1.除非创建API,否则使用HashMap而不是map
2.不改变逻辑的情况下能静态的静态
3.避免内部的getter/setter方法
4.Constants中使用static final变量
5.loog要比For循环速度快
6.Consider Package Instead of Private Access with Private Inner Classes
7.谨慎使用浮点型
8.让键盘没有黑色背影 设置SoftInputMode 为ADJUST_PAN
==================================以下为别人整理=========================================
1:Android Permission denied(不允许连接Socket) 错误
原因是: 需要访问到网络,所以,在AndroidManifest.xml中,需要进行如下配置:
2:ListView滚动变黑解决方法
ListView增加一个属性android:cacheColorHint=”#00000000”
3:Item用自己的背景盖住了Selector光标
ListView增加一个属性:android:drawSelectorOnTop=”true”这样光标就会跑到Item上面的图层
4:在利用Tab标签(自定义按钮)实现不同Activity切换,不同Activity均已经设置了模式为singleTask或singleInstance时,但是每次点击Tab标签中的特定Activity时,每次都还是会执行
onCreate方法,原因如下:
1:管理Tab标签(实现Activity切换的Tab标签)的容器(Activity)必须继承ActivityGroup
2:Activity设置的启动模式必须为singleTask或singleInstance
3:LocalActivityManager中的startActivity方法对于的Activity对应的ID,必须为需要跳转过去的Activity名称,否则失效。
4:存放tab标签(自定义按钮)对应的layout中必须有一个FrameLayout放置子activity。
5:模拟器提示访问网络出现如下异常:
java.net.UnknownHostException: Host is unresolved
原因是模拟器没有开通代理访问网络。
6:开发过程中,当listview控件中有button、checkbox等控件时,可能是由于这些子控件中获取到了focus事件,导致listview中onItemClick事件失效,只需要按如下方式处理即可:
1)每一个控件重新设置focusable属性
2)Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可
7:开发自定义控件步骤
1)创建res/values
private void setListViewPositon(ListView sourceListView, ListView desListView)
{
if (null != sourceListView && null != desListView)
{
int[] location = new int[2];
if (0 == listViewYLocation)
{
//获取该VIEW控件相对于手机屏幕的绝对坐标位置
desListView.getLocationOnScreen(location);
listViewYLocation = location[1];
}
[code] if (sourceListView.getCount() > 0) { //获取源ListView中第一个显示的item---在ListView中,使用getChildAt(index)的取值,只能是当前可见区域(列表可滚动)的子项! View convertView = sourceListView.getChildAt(0); if (null != convertView) { //view距离屏幕顶端距离 int convertViewLocationY = 0; //ListView中item距离ListView的顶部距离 int itemLocationY = 0; //获取该VIEW控件相对于手机屏幕的绝对坐标位置 convertView.getLocationOnScreen(location); convertViewLocationY = location[1]; itemLocationY = - (listViewYLocation - convertViewLocationY); int selectIndex = sourceListView.getFirstVisiblePosition(); desListView.setSelectionFromTop(selectIndex, itemLocationY); } } } }
63:
[code]private boolean isFirstItemVisible() { if (mChatListView != null) { if (mChatListView.getCount() == 0) { return true; } else if (mChatListView.getFirstVisiblePosition() == 0) { final View firstVisibleChild = mChatListView.getChildAt(0); final View secondVisibleChild = mChatListView.getChildAt(1); // 只要Listview中的第一个item是Loading,则触发请求,不论该item在屏幕中可见部分是多少像素。 if (firstVisibleChild != null && firstVisibleChild == headerView) { //开始执行加载Loading动画 headerView.startAnimation(animationHeaderLoading); int[] firstVisibleLocation = new int[2]; int[] listviewLocation = new int[2]; if (null != firstVisibleChild) { // 获取该VIEW控件相对于手机屏幕的绝对坐标位置 firstVisibleChild.getLocationOnScreen(firstVisibleLocation); secondVisibleItem = (GroupMessageItem) secondVisibleChild.getTag(); firstVisibleYLocation = firstVisibleLocation[1]; mChatListView.getLocationOnScreen(listviewLocation); listviewYLocation = listviewLocation[1]; } return true; } } } return false; }
64:Listview特别之处:
1)由于listivew删除头部的前提条件是1)header先要add至listview;2)listview.setAdapter,再可以remove头部
2)如果需要做listview整体上移动作,而listview顶部右一个布局问题,需要实现listivew上移动画是在该布局的下面完成,由于listivew整体移动时依据以其父布局文件,
故而listivew一定要控制在其父布局下面即可。
3)如果listview执行上移动画时,底部会出现空白区域,解决思路可以尝试对包含Listview的容器截图,对图片进行移动。
titleLayout.setDrawingCacheEnabled(true);
titleLayout.buildDrawingCache();
Bitmap bitmap = titleLayout.getDrawingCache();
animationImageView.setImageBitmap(bitmap);
animationImageView.setVisibility(View.VISIBLE);
titleLayout.setVisibility(View.INVISIBLE);
[code] translateAnimation = new TranslateAnimation(0f, 0f, 0f, -lineViewFlow.getHeight()); translateAnimation.setDuration(animationMillilis); animationImageView.startAnimation(translateAnimation); lineViewFlow.setVisibility(View.GONE);
65:旋转动画,如果出现没有按照中心点运行,可能的原因就是布局问题。
66:如果需要做在指定的时间内容界面无任何操作,执行某个动作,可以通过发送延时Handle。
67:动画执行和Ui操作不同步时,导致的原因可能是布局文件的层次结构导致。
68:如果布局需要实现上下两层的话,可以通过RelativeLayout实现,同时最上面的布局,应该放置在布局文件的最底部
69:如果view设置成View.INVISIBLE后,未生效,可能的原因
1)布局的问题
2)view是否设置了setFillAfter(true);
70:Android客户端布局文件中的每个空间的位置如果相对于布局本身不动的话,则离左边、右边、上边、下边都是为0,所以大家在理解布局文件的的元素布局是一定要搞清楚,为0的意思不是在手机最顶部的原点位置,切记!
71:性能优化和体验优化总结
1)如果在支持比较费时的操作且需要用户立刻显示界面时,可以采用AsynTask、发送延时Handler、Thread等。
72:Application ‘com.hotalk’ has its ‘debuggable’ attribute set to FALSE and cannot be debugged.
是由于AndroidManifest.xml文件中的Application中设置了debug模式.
73:如果运行eclipse时,出现ADB server didn’t ACK * failed to start daemon * error: unknown host service问题,且通过重启adb、eclipse、升级adt,都无效时,可以考虑如下:
1)到任务栏清除ADB.exe
2)关闭PC上面的手机连接助手工具进程。
3)重启adb
74:Android 实现Activity后台运行
第一种方法
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
第二种方法:此方法其实不是主要是屏蔽Keycode_Back,让它不结束(finish())Activity,直接显示HOME界面。
PackageManager pm = getPackageManager();
ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), 0);
if (keyCode == KeyEvent.KEYCODE_BACK)
{
ActivityInfo ai = homeInfo.activityInfo;
Intent startIntent = new Intent(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.setComponent(new ComponentName(ai.packageName,
ai.name));
startActivitySafely(startIntent);
return true;
}
else
{
return super.onKeyDown(keyCode, event);
}
75:解决出现ANR问题的部分技术细节
1)错误的使用SQLiteDatabase事物,需要捕获潜在的异常,不要因为未调用的transExecSQL中的endTransaction方法,导致30秒异常
2)重复Handler注册和发送信息
76:eclipse启动日志中出现如下异常: * java list.cache’ not found.
解决方法:删除eclipse对应workspace下面的.metadata文件夹
相关文章推荐
- Android处理延迟加载的方法
- Android L preview example
- Android Fragment
- android 上手维修设备和推断启动服务
- android中Bitmap用法(显示,保存,缩放,旋转)实例分析
- android之camera用法实例详解
- Android内存优化-OnTrimMemory
- android pull 解析xml
- android 内存性能优化笔记
- 关于Android使用proguard进行代码混淆
- Android中图片加载和显示问题的探究
- android scroller的原理分析
- 关于Android配色 自适应颜色的实现
- android 文件读写,sdcard写入
- android studio 添加.so依赖
- Android学习文档之数据存储
- [Android]Native Crash at vdc
- Android 清空输入框内容
- android.graphics.Color
- android读写文件的实现(针对android4.4不能在sdcard根目录下创建文件夹)