Intent i = new Intent(mActivity,MyActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i);
ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE); am.moveTaskToFront(mActivity.getTaskId(), 0);
这是你需要在AndroidManifest.xml中添加"android.permission.STOP_APP_SWITCHES"用户权限,前提是必须是系统应用才可以,具体可参考链接中的解释
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后一定能重启。
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; }
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; } }
在使用ViewPager和Fragment实现三个TAB切换时发现,有两个Fragment的内容不会预加载,对每个Fragment设置setUserVisibleHint(true)以后就解决了这个问题。
clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区域就往里缩,clipChildren是指子控件是否超过padding区域,这两个属性默认是true的
如果在不是系统提供的组件内要使用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 ()在合适的时候注册回调就可以了
定义布局是否传递touch事件到子布局,true表示传递给子布局,false表示不传递
是否限制子控件的绘图区域,即是否允许子控件区域超出父图。"true"表示限制,"false"表示不限制
使用CopyOnWriteArrayList CopyOnWriteArraySet来解决ConcurrentModificationException问题;
if (action == MotionEvent.ACTION_UP) { if((event.getEventTime() - event.getDownTime()) > ViewConfiguration.getLongPressTimeout()) return true; }
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
当ScrollView里的元素想填满ScrollView时,使用"fill_parent"是不管用的,必需为ScrollView设置:android:fillViewport="true"。
不会调用onPause,会调onWindowFocusChanged。
Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。
比如我们在做OTT项目时候,我们就是在这onWindowFocusChanged来获取主按键的具体位置和宽高的,而在其他标准生命周期的接口中调用都是获取不到的,比如在onResume,onStart中都获取不到信息。
这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会call。。
也就是说 如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个!
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>
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; }
// 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);