- 启动虚拟机时,在 launch options 窗口中 有个 wipe user data ,勾选它,将会让虚拟机 【恢复出厂设置】
2.【如果想让自己的应用程序有多个启动图标:】
- --------隐式意图---------
[打开电话拨号器 ]
4.--------显示意图---------
- string.getBytes(String charsetName) ; //使用指定的字符集(编码方式),将字符串编码成一个 字节数组,并返回
6.-----------------------------------【Activity两种启动方式,四种启动模式】-------------------------------------------
【Activity的两种启动方式】:
【 Activity的四种启动模式】:
7.一个正常运行的Activity,突然切换为横屏或竖屏:【会先销毁再创建】 onPause–>onStop–>onDestroy–>onCreate–>onStart–>onResume
8.在xml布局文件中使用 include标记可以在本布局文件的指定位置处,引用其他的布局文件:
-------------------------【单击某个按钮弹出几种形式的菜单】–OptionMenu,ContextMenu,PopupMenu ---------------------------------
9.安卓中实现单击某个按钮,弹出optionMenu(选项菜单) .只需要调用Activity.this.openOptionsMenu();方法就可以了
10.单击某个按钮, 弹出(ContextMenu)上下文菜单:
14.Spinner 的两种显示模式: (对话框,下拉列表)
- 安卓开发中对于需要访问数据库的项目一般建议创建:
16.AdapterView(如:ListView)的数据刷新-----当数据源的内容发生改变后,就应该对Adapter进行数据刷新
一般调用:this.adapter.notifyDataSetChanged();
17.【常见的Dialog有十种】:普通Dialog,多按钮普通Dialog,普通列表Dialog,单选列表Dialog,多选列表Dialog,,自定义Dialog,
- 【从MainActivity跳转到目标Activity然后返回MainActivity 】
19.目前发现:安卓中常见的可以使用链式调用的方式编写代码的有:
- 【获取当前程序的版本号】
——————————————————————————————————————
21. new Date().toLocaleString() //虽然已经被废弃,但是效果依然不错
——————————————————————————————————————————
22.【动态设置颜色的技巧】:
————————————————————————————————————————————————————————————————
23,对于SQLiteDatabase数据库的 表都建议使用 id 字段做主键 (自增)且 Integer 类型(实际上是:32位的int类型)
——————————————————————————————————————————————————————————————————————————————————
24.
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
25.关于 JavaBean 与 Json 数据的转换建议使用 谷歌提供的 Gson 框架
—————————————————————————————————————————————
- 分享功能实现 有两种方式:1.【使用系统自带的分享接口: (会显示一个分享列表供用户选择)】
——————————————————————————————————————————————————————————————————————————————————————————
29.使用四大组件 都需要在清单文件中进行注册,但广播接收器例外;因为它还可以动态注册(且ResultReceiver也无需注册)。
且四大组件都可以定义IntentFilter。
且四大组件的创建都是:创建一个类然后继承自某个组件类(例:MainActivity extends Activity)
MyFristService extends Service
MyReceiver extends BroadcastReceiver
AccountProvider extends ContentProvider
——————————————————————————————————————————————————————————————————————————————————————————
30。屏蔽Back键:
安卓中可以使用 SystemClock.sleep(ms) 来实现睡眠,且不需要做异常处理、
二者区别:Thread.sleep()是java提供的函数。在调用该函数的过程中可能会发生InterruptedException异常。
SystemClock.sleep()是android提供的函数。在调用该函数的过程中不会发生InterruptedException异常,中断事件将要被延迟直到下一个中断事件。U
————————————————————————————————————————————————————————————
32.对于接口两种处理方式:
1.创建一个类实现该接口
2.查看并使用接口的子类
接口可以隐藏代码的细节,让程序员暴露自己想暴露的部分代码
- 关于AIDL与IPC的一些面试题:
——————————————————————————————————————————————————————————————————————
34.【安卓中实现跨进程通信有多种方式:
——————————————————————————————————————————————————————————————
35. 获取到Cursor对象后必须先进判断,满足条件才能使用cursor:
- 如何将一个Android工程 变成一个 类库文件?
37.【注意:接收一个新项目时,首先打开eclipse–》window–>Preferences–》workspace—>建议将编码改成UTF-8】
————————————————————————————————————————————————————
38.versionName和versionCode的区别和用处:
————————————————————————————————————————————————————————
39.【minSdkVersion、maxSdkVersion、targetSdkVersion, Compile With 四个数值到底有什么区别?】
【补充:在清单文件中会标明 最低以及目标版本,然后编译版本则写在 project.properties文件中】
————————————
40.Eclipse中:选择方法名或者类名处 使用快捷键:alt+shift+J 即可实现快速文档注释。
Eclipse中:在实体类中:alt+shift+s 弹出窗口后,按下s 即可进入 geter/seter方法设置窗口。
Eclipse中:如果需要自动生成toString()方法:右键–》source–》generate toString。
————————————————————————————————
41. 【学习过程中 版本检测,app下载更新等功能的实现:】
42.在安卓开发中应该尽量使用Log.xxx打印日志调试程序。而少用System.out.pritnln();
43.小技巧:也可以利用Handler–Message机制来实现提示用户程序所出现的异常情况;
- 小技巧:选中自定义的TextView类名然后右键–》copy Qualified name -->即可获得该类的全类名。com.xx.xxx
此方法可以适用于任何类的类名上,获取类的全名。
45.有时重写了某个方法发现方法的参数 使用 arg0,arg1…这样表示,则说明这个类没有关联源代码。
46.handler.sendEmptyMessageDelayed(ENTER_HOME, 4000); //发送一个消息,让他延迟4秒后再做处理。
47.可以专门创建一个类(MyConstantValues)用于保存和管理项目中需要的常量.使用时:MyConstantValues.XXX 即可。
48.实际开发中可以 按照组件分包。例如:com.hzy.xxx.activity ,com.hzy.xxx.service …
49.布局文件中,在父控件标签后可以用 android:padding=“10dp” 设置内边距为10dp。
,也可以在子控件中设置 android:layout_margin=“10dp” 设置内边距为10dp。
50.访问项目中 assets 资源目录下的文件。
——————————————————————————————————————————————————————————————————————————
51.【从整个Eclipse中的的某个项目中搜索关键字。】----反编译常用
52.【利用震动器实现手机震动效果】
52.在Service中虽然也可以弹出Toast但是必须使用getApplicationContext();切记不能使用this。
- [透明Activity的实现.只需要在清单文件中为这个Activity标签设置 theme属性值即可:]
[如果需要半透明效果则可以在 此Activity的布局文件中设置 底层布局的 background属性为一个半透明的色值(例:#acfc)即可.]
54.改变一个控件的坐标有两种方式:
55.【可以用两个连续的单击事件作为双击事件。实现控件的双击事件监听。一般设置时间间隔为500毫秒之内。】
- ★【如果使用了自增长的id做主键,则必须重新开启子线程获取数据,刷新适配器。】
【在数据库中delete或update数据记录时 :
】
- 【添加一个本地刷新方法,每当完成数据库增删改后 就将增删改同步到本地的 beans 中。然后开启本地数据刷新。而不是请求下一页。】
58.- 清单文件中可以指定本应用程序安装位置
59.【让ImageButton实现像是ImageView一样单纯的展示图片,而没有背景(即:透明背景)。】
60.由于ViewPager属于 android.support.v4.view.ViewPager ,因此如果想看到源码则必须按照如下步骤:
61.由于TextView默认是没有点击事件的,因此如果想为TextView设置点击事件则有两种方式:
62.当多个控件有共同的一些属性值时:
63.解决模拟器不能输入中文的问题(无论是用软键盘,还是物理键盘都不行):
64:【实现侧边栏(侧滑面板)效果有四种方式】:
65.:【免root 查看应用程序的 data/data/目录下的文件】
66.当应用进入后台且内存不足的时候,系统是会回收这个Activity的。通常我们都知道要用onSaveInstanceState()去保存状态,用onRestoreInstanceState()去恢复状态。
67.【建议在自定义的 baseApplication 中提供一个 getAppContext() 方法。以后弹出Toast都可以用这个。】
- android:animateLayoutChanges 这是一个非常酷炫的属性。
在父布局加上 android:animateLayoutChanges=“true” 后,如果触发了layout方法(比如它的子View设置为GONE),系统就会自动帮你加上布局改变时的动画特效!! - tools标签可以很好的帮助开发者实时预览xml的效果,
通过tools:background可以预览控件所占的控件,
tools:visibility可以把一个gone的控件在预览的时候展示出来,并且运行以后tools标签的内容不会展示出来.
例如:
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE) 设置安全窗口,禁用系统截屏。
防止 App 中的一些界面被截屏,并显示在其他设备中造成信息泄漏。(常见手机设备系统截屏操作方式为:同时按下电源键和音量键。) - 在RecycleViewAdapter的 onCreateViewHolder() 方法中,可以使用:
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
来获取 layoutInflater ,从而避免让 Adapter 持有Activity。 - 判断使用哪种Context :最简单的方法是根据控件(或组件)的生命周期决定传什么参数。
- 可以利用Application实现单进程的组件之间的数据传递。
通常情况下我们为了实现两个组件之间对象的传递,都需要将对象实现 Parcellable 或 Serializable 接口。但是如果两个Activity处于同一个进程,那么完全可以用Application 来实现。 - 当我们调用 getSharedPreference() 方法时实际上会将 磁盘文件中SharedPreference数据加载进内存中。
因此当我们访问某个保存在SharedPreference中的数据时,实际上会从内存缓存中获取,因此无需担心效率问题。
不过在往SharedPreference中写数据时就需要注意了:大多数情况下,我们使用 apply 就够了,因为 apply() 是同步写到内存,然后异步提交到磁盘,而 commit() 则是同步写入到内存,并且同步写入到磁盘。 - Java 程序中判断当前线程是否是主线程可以用打印 Thread Name 的方式来分辨出主线程,而在Android程序中则有更简便的方法。
可以封装成一个工具方法:
- 判断当前程序是否运行在主进程
- Jar和Aar的区别
- 利用反射根据ActivityName 来开启Activity
- 利用 Gson 实现反序列化,将json传解析成Bean对象时,Bean对象的类中定义的某个成员如果是String类型,则可以兼容json数据中的任何普通数据类型的数据。例:
此时依然能够将 14 注入到 TestBean.textSize 字段中。(最终的结果就是: textSize 内容为 “14”)
同理也能注入到一个Map<String,String> 中去:
- [通过包名实际上就可以开启手机上所有的App]
- 如果只是打开这些程序,那么可以利用桌面图标的启动方式,只需利用【包名】就可以开启桌面的任意应用程序!
注意: 打开前需要判断指定包名所对应的应用程序,是否存在
更多详见: …android 开发Intent隐式意图 与 显示意图.txt