Я думаю, что ваша оболочка по умолчанию - dash
или sh
, а не bash
в этом случае. echo $SHELL
должен показать его, если он покажет /bin/sh
, это может быть ссылка, поэтому убедитесь, что ls -l /bin/sh
не ссылается на какую-либо другую оболочку.
Добавление ответа вместо продолжения в комментариях.
По умолчанию Android будет сохранять состояние вашего пользовательского интерфейса тогда и только тогда, когда вы используете компоненты по умолчанию (имеется в виду TextView
, Button
, Switch
и т. Д.) И у вашего компонента есть идентификатор. Это состояние сохранится только в том случае, если ОС убивает приложение и пользователь возвращается к нему. Это означает, что если пользователь нажмет кнопку Home
, а затем вернется к вашему Activity
на более позднем этапе, состояние пользовательского интерфейса всех компонентов по умолчанию этого конкретного Activity
будет восстановлено. При нажатии кнопки Home
Activity
останавливается и вызывается onSaveInstanceState
, поэтому здесь у вас есть возможность сохранить любое состояние, которое не поддерживается компонентами по умолчанию, или если у вас есть данные, которые вы скачали, например, используется для заполнения ваших компонентов пользовательского интерфейса данными.
Если пользователь нажмет кнопку Back
, приложение будет убито, и любое состояние пользовательского интерфейса не будет восстановлено по умолчанию. Чтобы преодолеть это, вы можете использовать SharedPreferences
или любой другой механизм локального хранилища для хранения вашего пользовательского интерфейса на диске.
Я добавил фрагмент кода, который показывает, как вы можете использовать разные подходы.
В вашем случае вам не нужна реализация метода onSaveInstanceState
, поскольку у вас есть компонент пользовательского интерфейса по умолчанию, который уже знает, как сохранить свое собственное состояние, и, как уже упоминалось, Android уже делает это автоматически для вас.
Оба состояния (savedInstanceState
и то, что входит в SharedPreferences
) должны быть восстановлены в методе onCreate
, так как он всегда вызывается всякий раз, когда Activity
воссоздается или создается впервые, в то время как onRestoreInstanceState
] не всегда можно вызывать.
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getName();
private static final String CHECKBOX__STATE = "CHECKBOX__SAVE_STATE";
private Switch checkbox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkbox = findViewById(R.id.checkbox);
final boolean isChecked;
if (savedInstanceState != null) {
isChecked = savedInstanceState.getBoolean(CHECKBOX__STATE);
} else {
isChecked = PreferenceManager.getDefaultSharedPreferences(this)
.getBoolean(CHECKBOX__STATE, false);
}
// Setting the state (if any) of the Switch.
checkbox.setChecked(isChecked);
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Log.d(TAG, "onCheckedChanged: isChecked = true - log location");
} else {
Log.d(TAG, "onCheckedChanged: isChecked = false - stop logging location");
}
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(CHECKBOX__STATE, checkbox.isChecked());
}
@Override
protected void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putBoolean(CHECKBOX__STATE, checkbox.isChecked())
.apply();
}
}
Надеюсь, это поможет: -)