2017-01-11 15 views
1

私はinvalidateOptionsMenu()を使用してアクションバーを更新していますが、地獄のようなアプリの速度が遅くなります。 invalidateOptionsMenu()は無限ループになります。ここに私のコードです -invalidateOptionsMenu()のためにAndroid UIが非常に遅い

@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; 
      } 
} 

どうすれば解決できますか?

答えて

0

onCreateOptionsMenuinvalidateOptionsMenu()であるため、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; 
     } 
} 
+0

ありがとうございます。少しの変更が必要でした。 onResume()からlockScreenSettingを呼び出す必要があり、onCreateOptionsMenu()からではありません。 –

+0

ようこそ。あなたはそれを整理してうれしいです。 –

0

invalidateOptionsMenu()を呼び出すと、onCreateOptionsMenuが呼び出され、lockScreenSettingメソッドが呼び出されます。

+0

しかし、無限にUIが遅くなる原因と呼ばれます。何ができるのですか –

+1

onCreateOptionsMenuからlockScreenSettingへの呼び出しを削除します。 –

関連する問題