Просто хотел опубликовать другое решение, которое я нашел самым простым для меня:
SharedPreferences sharedpreferences;
int autoSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//"autoLogin" is a unique string to identify the instance of this shared preference
sharedpreferences = getSharedPreferences("autoLogin", Context.MODE_PRIVATE);
int j = sharedpreferences.getInt("key", 0);
//Default is 0 so autologin is disabled
if(j > 0){
Intent activity = new Intent(getApplicationContext(), HomeActivity.class);
startActivity(activity);
}
}
public void loginBtn(View view){
//Once you click login, it will add 1 to shredPreference which will allow autologin in onCreate
autoSave = 1;
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt("key", autoSave);
editor.apply();
}
Теперь давайте предположим, что у меня есть кнопка выхода из другого упражнения:
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//Get that instance saved in the previous activity
sharedPreferences = getSharedPreferences("autoLogin", Context.MODE_PRIVATE);
}
@Override
public void signOut(View view) {
//Resetting value to 0 so autologin is disabled
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("key", 0);
editor.apply();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
Если разбить его на части, то можно выделить три больших части:
:() # Defines a function, ":". It takes no arguments.
{ ... }; # The body of the function.
: # Invoke the function ":" that was just defined.
Внутри тела функция вызывается дважды, и конвейер является фоновым; каждый последующий вызов процессов порождает еще больше вызовов ":". Это быстро приводит к взрывному потреблению системных ресурсов, что приводит к остановке работы.
Обратите внимание, что его однократный вызов, бесконечно повторяющийся, не будет достаточно хорошим, поскольку это приведет к переполнению стека исходного процесса, что беспорядочно, но с ним можно справиться.
Более удобный для человека способ. версия выглядит так:
kablammo() { # Declaration
kablammo | kablammo& # The problematic body.
}; kablammo # End function definition; invoke function.
Редактировать: William '
Краткий ответ:
Двоеточие (":") становится функцией, Итак, вы запускаете функцию, переданную по конвейеру, и помещаете ее в фон, что означает, что для каждого вызова функции вызываются 2 копии функции. Рекурсия имеет место.