Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android UI非常慢,因为InvalidateOptions菜单()_Android - Fatal编程技术网

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