Завершить или выйти из приложения из вторичной деятельности?
Я перемещаюсь по Упражнению 2, и к тому времени, когда я нажимаю кнопку "Назад", оно должно выйти или завершить приложение, не отображая основное задание. Я использую ViewPager(Activity2), код работает в backpress
если я перемещаюсь только по первой странице ViewPager, в тот момент, когда я перемещаюсь по другим страницам, код для выхода из приложения или его завершения не работает и отображает mainActivity.
Основная деятельность
Intent myIntent = new Intent(MainActivity.this, Activity2.class);
деятельности2
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
getParent().finish();
Activity a1 = (Activity)this.getBaseContext();
if(this.getParent()!=null){
Activity a = (Activity)this.getParent().getApplicationContext();
a.finish();
}
Log.i("Backpressed", "pressed");
}
5 ответов
Это будет работать,
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Если вы используете kill process.. затем на обратных нажатиях уничтожьте весь процесс.. используйте цикл for, чтобы получить pid для всех процессов.. и уничтожить их.. вот так
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = am
.getRunningAppProcesses();
if (list != null) {
for (int i = 0; i < list.size(); ++i) {
String processid = list.get(i).processName;
String packageName = mContext.getPackageName();
if (processid.contains(packageName + ":homescreen")) {
//here homescreen is the name you given in manifest for android:process
Process.killProcess(list.get(i).pid);
}
и в манифесте для каждого действия добавьте android:process=":anyname", как это
Android: процесс = ": рабочий стол"
Вы уверены, что после "System.exit(0);" называется, остальной код будет вызван? как я помню, не будет. все должно работать так, как вы хотели.
в любом случае, пожалуйста, не используйте ни один из этих методов. System.exit может быть достаточно для вас в некоторых случаях, но на самом деле он убивает все потоки приложения и считается грязным способом сделать это.
вместо этого вызовите startActivityForResult из действия 1 в действие 2 . затем в действии 2 вызовите финиш и задайте для чего-либо результат, а в задании 1 проверьте, должен ли результат выйти из приложения, и, если это так, вызовите там также метод finish().
Добавлять finish();
в вашей основной деятельности.
Вы также можете добавить следующие строки в свой манифест под MainActivity
android:excludeFromRecents="true"
android:finishOnTaskLaunch="true"
android:noHistory="true"
Попробуйте добавить это android:noHistory="true"
в вашем манифесте, как это
<activity
android:noHistory="true"
android:name="com.example.activities.MainPageActivity"
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>