Android 开发技巧 开发常见问题归纳 需要注意的坑和解决方案
来源:互联网 发布:产品宣传手册制作软件 编辑:程序博客网 时间:2024/05/01 07:28
1. 在Activity还没完全显示时,弹出PopupWindow或者Dialog 崩Activity not running 错误
解决方案: 重写onWindowFocusChanged方法
@Overridepublic void onWindowFocusChanged(boolean hasFocus) {if (hasFocus) {if (!mIsInitData) {initData();mIsInitData = true;}}super.onWindowFocusChanged(hasFocus);}protected void initData() { // 在此处编写弹出Popup或者Dialog的方法}2. 在library中使用switch语句处理id 时报错
产生原因:library中生成的R文件中生成的id 没有用final 修饰(不要问为什么,我也想知道)
解决方案:使用if else 替换switch
3. 不要在Application中缓存任何数据,NoPointException
产生原因:一般情况下不会出现异常,当按下Home 应用隐藏到后台,长时间未使用,导致应用被回收,当再次启动时,Application会重新创建,而Activity此时再向Application里取数据,异常发生
解决方案:将数据缓存到sp 或者数据库或者sd卡。或者在使用Application缓存数据时,进行null判断
4. AsyncTask只能执行一次
5. 提取一个BaseActivity,里面进行一些统一处理,能让你的代码更简洁。继承第三方框架的时候也很方便处理,特别是继承友盟统计是,如果没有Base,那你就哭(┬_┬)吧
public abstract class BaseActivity extends Activity implements OnClickListener {private boolean mIsInitData;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void setContentView(int layoutResID) {super.setContentView(layoutResID);initView();}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {if (hasFocus) {if (!mIsInitData) {initData();mIsInitData = true;}}super.onWindowFocusChanged(hasFocus);}protected void initData() {}protected abstract void initView();/** * 获取View * * @param id * @return */@SuppressWarnings("unchecked")protected <T extends View> T mGetView(int id) {return (T) findViewById(id);}/** * 获取Button的实例 并绑定点击事件 * * @param id * @return */protected Button mGetButtonSetOnClick(int id) {Button btn = (Button) findViewById(id);btn.setOnClickListener(this);return btn;}/** * 获取ImageView的实例 并绑定点击事件 * * @param id * @return */protected ImageView mGetImageViewSetOnClick(int id) {ImageView image = (ImageView) findViewById(id);image.setOnClickListener(this);return image;}/** * 获取View的实例 并绑定点击事件 * * @param id * @return */protected View mGetViewSetOnClick(int id) {View view = (View) findViewById(id);view.setOnClickListener(this);return view;}/** * 获取TextView中的文本信息 * * @param tv * @return */protected String mGetTextViewContent(TextView tv) {return tv.getText().toString().trim();}/** * 获取EditText中的文本信息 * * @param et * @return */protected String mGetEditTextContent(EditText et) {return et.getText().toString().trim();} protected void showHintMsg(int sid) {MToast.showToast(this, getResources().getString(sid));}protected void showHintMsg(String sMsg) {MToast.showToast(this, sMsg);}}
6. Toast定义为全局,避免一直不断的吐吐吐吐。
public class MToast {private static Toast mToast;private static TextView tv_content;public static void showToast(Context context, String msg) {try {if (mToast == null) {mToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);mToast.setGravity(Gravity.TOP, 0,DensityUtil.dip2px(context, 3));View view = View.inflate(context, R.layout.m_toast, null);tv_content = (TextView) view.findViewById(R.id.tv_content);mToast.setView(view);tv_content.setText(msg);} else {tv_content.setText(msg);}mToast.show();} catch (Exception e) {// TODO: handle exception}}}
7. 标题栏样式抽取,抽取思路大概有两种,第一种:用<inlcude>标签在xml布局时引入,第二种:自定义一个TitleView,千万不要偷懒节省这个步骤。指不定那天产品就要让你改个样式,到时候你就哭吧。不仅仅是标题栏,字体大小,主题颜色,能抽取的都统一处理,产品的心和女人的新一样,说变就变。
8. TextView.setText();中要显示int类型的值,用String.valueOf()转,不要直接124+“”,不知道为什么这样的同学,基础太差,去看看源码就知道为什么了。
9. 退出应用方式,1.直接杀死进程 2.在BaseActivity中注册一个广播,发送广播关闭 3.定义一个全局容器存储Activity应用,退出时遍历退出(不推荐)
10. 一个功能分几个页面处理时,使用Dialog 模拟Activity 避免了数据在Activity之间传递。
11. 手机重启,知乎上看到滴,通过不断的new 空Toast,导致系统奔溃而重启,想想竟有一种无言以对的感觉,原来Toast还可以尼玛这么玩
public void onClick(View v){ while(true){ Toast toast = new Toast(this); toast.setView(new View(this)); toast.show(); }}
12. View类中的setSelected(boolean)方法结合android:state_selected="" 用来实现图片选中效果 自定义标题栏用起来很方便;
13. EditText 中有个 android:digits="" 属性,用来自定义输入的字符类型,比如输入身份证只能是数字和x或者X 使用 android:digits="1234567890xX" 就轻松搞定了,不用再在代码里面进行蛋疼的校验了;
今天就补充到这
- Android 开发技巧 开发常见问题归纳 需要注意的坑和解决方案
- Android常见问题归纳(需要注意的坑和解决方案)
- Android开发中需要注意的坑
- Android开发技巧、常见的坑和解决方案(二)
- Android WebView开发需要注意的地方和优化
- 【Android归纳】开发中应该注意的事项
- 开发android客户端需要注意的事项
- Android开发60需要注意的问题
- Android开发需要注意的问题
- Android平板电脑应用开发的技巧和注意点
- IOS开发的一些技巧和常见问题
- IOS开发的一些技巧和常见问题
- 需要注意的开发规范和习惯
- Android开发中需要注意哪些坑
- Android开发中需要注意哪些坑
- Android开发中需要注意哪些坑
- 【Android开发技巧】 UI开发常见问题
- 开发需要注意的小点
- 磁盘管理-基本磁盘、动态磁盘、GPT磁盘、MBR磁盘/CHS(cylinder柱面-head磁头-sector扇区)
- Android studio 导入 PullToRefresh
- 从零开始配置Jenkins(二)——常见问题及排错思路
- 【LeetCode】70Climbing Stairs
- 数据结构C++语言描述专题系列 (二) 栈
- Android 开发技巧 开发常见问题归纳 需要注意的坑和解决方案
- android之往手机内存合sdcard卡上存储数据
- iOS获取设备信息
- visualvm监控jvm及远程jvm监控方法
- i2cdetect/i2cdump 查看系统的i2c bus数量以及i2c device挂载地址
- 设计模式:对于一种类,有可能需要在其执行前,中,后,插入一些代码,留下接口,让调用者实现
- ECS Linux系统SSH服务安全配置
- spark示例
- Appcan listview 下拉刷新上啦加载源码