Android应用开发常用知识(2)
2014-09-27 16:07
267 查看
1、关于android.permission.STOP_APP_SWITCHES权限
http://blog.csdn.net/ixiaobu/article/details/18226917如果你想通过Service把home到后台的Activity启动到前台来,你有两种办法:
1)、startActivity(i)的方法
Intent i = new Intent(mActivity,MyActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i);
2)、moveTaskToFront的方法:
ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE); am.moveTaskToFront(mActivity.getTaskId(), 0);
但同时有两个问题:
1)、第一种方法:等几秒钟Activity才显示出来
2)、第二种方法:根本不起左右
这是你需要在AndroidManifest.xml中添加"android.permission.STOP_APP_SWITCHES"用户权限,前提是必须是系统应用才可以,具体可参考链接中的解释
2、Service的onStartCommand4种返回值所代表的意义
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统将会把它置为started状态,系统不会自动重启该服务,直到startService(Intent intent)方法再次被调用;。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
3、Android判断网络是否连接
private boolean isNetworkConnected(){ ConnectivityManager connManager = (ConnectivityManager) mProxy.getContext() .getSystemService(Context.CONNECTIVITY_SERVICE); if(connManager != null && connManager.getActiveNetworkInfo() != null && connManager.getActiveNetworkInfo().isConnected()){ return true; } return false; }
4、Andrioid判断应用是否安装
private boolean isAppInstalled(String pkgName){ PackageInfo packageInfo = null; try { packageInfo = mContext.getPackageManager().getPackageInfo(pkgName, 0); } catch (NameNotFoundException e) { //e.printStackTrace(); } if(packageInfo != null){ return true; }else{ return false; } }
5、Fragment setUserVisibleHint(true)的用法
在使用ViewPager和Fragment实现三个TAB切换时发现,有两个Fragment的内容不会预加载,对每个Fragment设置setUserVisibleHint(true)以后就解决了这个问题。6、Android clipToPadding和clipChildre
clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区域就往里缩,clipChildren是指子控件是否超过padding区域,这两个属性默认是true的7、ComponentCallbacks和ComponentCallbacks2
如果在不是系统提供的组件内要使用onConfigurationChanged或者onLowMemory的话可以用下面方法实现:public static class MyCallback implements ComponentCallbacks { @Override public void onConfigurationChanged(Configuration arg) { } @Override public void onLowMemory() { //do release operation } }
ComponentCallbacks2可以提供onTrimMemory函数
然后,通过Context.registerComponentCallbacks ()在合适的时候注册回调就可以了
8、android:splitMotionEvents
定义布局是否传递touch事件到子布局,true表示传递给子布局,false表示不传递9、android:clipChildren
是否限制子控件的绘图区域,即是否允许子控件区域超出父图。"true"表示限制,"false"表示不限制10、Android开发中高效的数据结构用SparseArray代替HashMap
11、CopyOnWriteArrayList
使用CopyOnWriteArrayList CopyOnWriteArraySet来解决ConcurrentModificationException问题;12、onTouchEvent中处理长按事件
if (action == MotionEvent.ACTION_UP) { if((event.getEventTime() - event.getDownTime()) > ViewConfiguration.getLongPressTimeout()) return true; }
13、Android开发中,那些让你相见恨晚的方法、类或接口
http://liukun.engineer/2016/04/11/Android%E5%BC%80%E5%8F%91%E4%B8%AD%EF%BC%8C%E9%82%A3%E4%BA%9B%E8%AE%A9%E4%BD%A0%E7%9B%B8%E8%A7%81%E6%81%A8%E6%99%9A%E7%9A%84%E6%96%B9%E6%B3%95%E3%80%81%E7%B1%BB%E6%88%96%E6%8E%A5%E5%8F%A3/https://www.zhihu.com/question/33636939/answer/57239990?group_id=612750833369153536
14、android:fillViewport
当ScrollView里的元素想填满ScrollView时,使用"fill_parent"是不管用的,必需为ScrollView设置:android:fillViewport="true"。15、Android通知栏下拉后,当前Activity的生命周期变化
不会调用onPause,会调onWindowFocusChanged。Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。
比如我们在做OTT项目时候,我们就是在这onWindowFocusChanged来获取主按键的具体位置和宽高的,而在其他标准生命周期的接口中调用都是获取不到的,比如在onResume,onStart中都获取不到信息。
这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会call。。
也就是说 如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个!
16、Android利用广播监听设备安装和卸载应用程序
mAppBroadcastReceiver=new AppBroadcastReceiver(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("android.intent.action.PACKAGE_ADDED"); intentFilter.addAction("android.intent.action.PACKAGE_REMOVED"); intentFilter.addDataScheme("package"); this.registerReceiver(mAppBroadcastReceiver, intentFilter);
<receiver android:name="cn.testappaddandremove.AppBroadcastReceiver"> <intent-filter > <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver>
17、查询是否有支持某个Uri或者mimetype的activity
public boolean checkSchemaOK(String uri) { if(mContext == null) return false; boolean checkSchemaOK = false; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(uri)); checkSchemaOK = intent.resolveActivity(mContext.getPackageManager()) != null; return checkSchemaOK; }
18、Android让ListView记住上次滑动到的位置
// save index and top position int index = mList.getFirstVisiblePosition(); View v = mList.getChildAt(0); int top = (v == null) ? 0 : v.getTop(); // ... // restore mList.setSelectionFromTop(index, top);
相关文章推荐
- Android应用开发常用知识
- Android应用开发常用知识-ActionBar相关(5)
- android应用开发常用知识总结
- Android应用开发常用知识(3)
- Android应用开发常用知识
- Android应用开发常用知识(4)
- android在实际开发应用中最常用的按钮点击事件
- android应用开发笔记---常用控件RadioGroup和RadioButton及Toast
- eclipse下开发android应用的几个常用插件
- struts 提供的标签iterator,开发应用常用知识
- Android应用调试常用知识
- Android应用开发——界面开发之常用组件的属性介绍
- Android开发中常用小知识
- android应用开发笔记---常用控件使用方法
- android应用开发详解(八)------------常用组件之AutoCompleteTextView(续)
- Android系列一:Android应用开发基础知识篇
- android应用开发笔记---常用控件ProcessBar和ListView
- 开发一款高端大气上档次的android应用需要必备的知识
- android应用开发详解(八)---------------常用组件之选项卡Tab的三种用法(续)