1,状态栏抖动的问题大多是界面跳转时动画导致的,所以我们只需要屏蔽系统设置中开发者选项中的绘图中动画特效就可以了
需要用到
public class DeveloperAnimationManager {
public IWindowManager mIWindowManager = null;
private Context mContext = null;
public DeveloperAnimationManager(Context ctx) {
mContext = ctx;
mIWindowManager = getIWindowManager();
}
private IWindowManager getIWindowManager() {
// IBinder wmbinder = ServiceManager.getService( “window” );
IWindowManager windowManager = null;
try {
Object object = new Object();
Method getService = Class.forName(“android.os.ServiceManager”).getMethod(“getService”, String.class);
Object obj = getService.invoke(object, new Object[]{new String(“window”)});
// System.out.println(obj.toString());
windowManager = IWindowManager.Stub.asInterface((IBinder) obj);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
} catch (InvocationTargetException ex) {
ex.printStackTrace();
}
return windowManager;
}
/**
* 设置动画缩放开关
* @param which 0:窗口动画缩放 1:过渡动画缩放
*/
public void setAnimationScale(int which, boolean open) {
try {
if (mIWindowManager != null) {
float targetScale;
/**
* 0: 关闭动画
* 0.5: 动画缩放0.5x
* 1: 动画缩放1x
* 1.5: 动画缩放1.5x
* 2: 动画缩放2x
* 5: 动画缩放5x
* 10: 动画缩放10x
*/
if (open) {
targetScale = 1f;
} else {
targetScale = 0f;
}
boolean isPermission = isPermissionDone();
float curScale = mIWindowManager.getAnimationScale(which);
Logcat.d("which=" + which + ",open=" + open + ",getAnimationScale=" + curScale
+ ",isPermissionDone=" + isPermission);
if (!isPermission) {
return;
}
if (targetScale != curScale) {
mIWindowManager.setAnimationScale(which, targetScale);
}
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
private boolean isPermissionDone() {
boolean reslult = false;
String permissionName = Manifest.permission.SET_ANIMATION_SCALE;
String packageName = mContext.getPackageName();
PackageManager pm = mContext.getPackageManager();
boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permissionName, packageName));
Logcat.d("isPermissionDone permission=" + permission);
if (permission) {
//showToast("有这个权限");
reslult = true;
}
return reslult;
}
为了防止无法获取到系统权限,需要在应用AndroidManifest中加入 android:sharedUserId="android.uid.system"这句话才行
然后在应用启动界面的onCreate()方法中加入下面代码就可以了
//设置界面跳转时,动画效果,屏蔽动画
DeveloperAnimationManager devAnimManager = new DeveloperAnimationManager(this);
devAnimManager.setAnimationScale(0,false);
devAnimManager.setAnimationScale(1,false);
这样就从根本上解决了界面跳转时,界面抖动的问题了