SwitchCompat
アクティビティにいくつかOnCheckedChangeListener
ありますが、(を使用してSharedPreferences
)アクティビティを開始するたびに、オンかオフかに関係なく OnCheckedChangeListener のアクションが実行されます(これはパフォーマンスが非常に悪いため、オン状態のアクションは、シェル スクリプトを実行し、SnackBar
時間がかかるので a を表示することです)。
ここに小さなコードがあります...
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
//Private stuffs...
SwitchCompat play; //and many others
public static final String PREFS_NAME = "SwitchButton";
protected void onCreate(Bundle savedInstanceState) {
// ...
play = (SwitchCompat) findViewById(R.id.play_switch);
play.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Shell.SU.run("sh /data/data/br.com.packagename/play_on");
Snackbar snack_play_on = Snackbar.make(play, R.string.play_on, Snackbar.LENGTH_SHORT);
snack_play_on.show();
SharedPreferences.Editor editor = getSharedPreferences("SwitchButton", MODE_PRIVATE).edit();
editor.putBoolean("onPlay", true);
editor.apply();
} else {
Shell.SU.run("sh /data/data/br.com.packagename/play_off");
SharedPreferences.Editor editor = getSharedPreferences("SwitchButton", MODE_PRIVATE).edit();
editor.putBoolean("onPlay", false);
editor.apply();
Snackbar snack_play_off = Snackbar.make(play, R.string.play_off, Snackbar.LENGTH_SHORT);
snack_play_off.show();
}
}
});
play.setChecked(sharedPrefs.getBoolean("onPlay", false));
だから... Snackbarが示すアクティビティ(アプリ自体)を開くたびに、SwitchCompatのオン状態にリンクされたアクションが実行されます。これにより、アクティビティのロード時にフレーム スキップが多すぎます (1GB、1.2GHz クアッド デバイスで約 230)。Switch は 1 つ以上、4 つまたは 5 つです。
私は何をすべきか?私は何かを見逃していますか、それともコードを間違った場所に置いていますか? OnResume、OnPause などの他のメソッドを使用する必要がありますか?