Android UI非常慢,因为InvalidateOptions菜单()
我正在使用Android UI非常慢,因为InvalidateOptions菜单(),android,Android,我正在使用invalidateOptionsMenu()更新操作栏,但这会让我的应用程序运行得非常慢。invalidateOptions菜单()构成一个无限循环。这是我的密码- @Override public boolean onCreateOptionsMenu(Menu menu) { if((lockScreenSetting(getContentResolver()) == 1)){ getMenuInflater().inflate(R
invalidateOptionsMenu()
更新操作栏,但这会让我的应用程序运行得非常慢。invalidateOptions菜单()
构成一个无限循环。这是我的密码-
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if((lockScreenSetting(getContentResolver()) == 1)){
getMenuInflater().inflate(R.menu.filex, menu);
return true;
} else{
return false;
}
}
public int lockScreenSetting (ContentResolver contentResolver)
{
boolean isLockEnabled = true;
KeyguardManager km = (KeyguardManager) this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
isLockEnabled = km.isKeyguardSecure();
long mode = android.provider.Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
// if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
if (android.provider.Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1){
invalidateOptionsMenu();
return Constants.UNLOCK_WITH_PATTERN;
}
else if(isLockEnabled){
invalidateOptionsMenu();
return Constants.UNLOCK_WITH_PIN;
}
else{
invalidateOptionsMenu();
return Constants.UNLOCK_WITH_NONE_OR_SLIDER;
}
}
如何解决此问题?调用
无效选项菜单()
将导致调用onCreateOptions菜单
,从而导致调用您的锁定屏幕设置
方法。调用无效选项菜单()
将导致调用onCreateOptions菜单
,从而导致调用您的锁屏设置
方法。一旦触发onCreateOptions菜单
,无效选项菜单()
,您将无限次调用锁屏设置
,因此请改用一个字段
int lockSetting = -1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(lockSetting == 1){
getMenuInflater().inflate(R.menu.filex, menu);
return true;
} else{
lockScreenSetting(getContentResolver());
return false;
}
}
public void lockScreenSetting (ContentResolver contentResolver)
{
boolean isLockEnabled = true;
KeyguardManager km = (KeyguardManager) this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
isLockEnabled = km.isKeyguardSecure();
long mode = android.provider.Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
// if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
if (android.provider.Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1){
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_PATTERN;
}
else if(isLockEnabled){
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_PIN;
}
else{
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_NONE_OR_SLIDER;
}
}
onCreateOptions菜单
被触发invalidateOptions菜单()
,因此您无限次调用lockScreenSetting
,因此请改用一个字段
int lockSetting = -1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if(lockSetting == 1){
getMenuInflater().inflate(R.menu.filex, menu);
return true;
} else{
lockScreenSetting(getContentResolver());
return false;
}
}
public void lockScreenSetting (ContentResolver contentResolver)
{
boolean isLockEnabled = true;
KeyguardManager km = (KeyguardManager) this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
isLockEnabled = km.isKeyguardSecure();
long mode = android.provider.Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
// if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
if (android.provider.Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1){
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_PATTERN;
}
else if(isLockEnabled){
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_PIN;
}
else{
invalidateOptionsMenu();
lockSetting = Constants.UNLOCK_WITH_NONE_OR_SLIDER;
}
}
但它被称为“无限”导致UI速度减慢。可以做什么从OnCreateOptions菜单中删除对lockScreenSetting的调用,但它被无限调用,导致UI速度减慢。可以做什么从OnCreateOptions菜单取消对lockScreenSetting的调用谢谢。需要稍加修改。需要从onResume()而不是OnCreateOptions菜单()调用lockScreenSetting谢谢。需要稍加修改。需要从onResume()而不是从OnCreateOptions菜单()调用lockScreenSetting