我的Activity中有一些SwitchCompat
,我将OnCheckedChangeListener
设置为其中一个但是(使用SharedPreferences
),每次启动Activity时,都会执行OnCheckedChangeListener的操作无论它是打开还是关闭(这对于性能非常非常糟糕,因为打开状态操作是运行shell脚本并显示SnackBar
,因为它需要一些时间。)< / p>
这是一小段代码......
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的On状态的链接操作。 这会导致在加载Activity时跳过太多帧(在1GB,1.2GHz四分频设备中为430)。有一个以上的Switch,四个或五个。
我该怎么办?我错过了soomething或将代码放在错误的地方?我应该使用OnResume,OnPause等其他方法吗?
答案 0 :(得分:0)
调用setChecked()
以与用户点击相同的方式调用侦听器。
我现在处理设置所有复选框,如下所示:
play = (SwitchCompat) findViewById(R.id.play_switch);
play.setOnCheckedChangeListener(null);
play.setChecked(sharedPrefs.getBoolean("onPlay", false));
play.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
...