如何退出应用程序并显示主屏幕?
我有一个应用程序,在主页上我有button导航通过应用程序。
在那个页面上,我有一个button“退出”,当点击时,应该把用户带到应用程序图标所在手机的主屏幕上。
我怎样才能做到这一点?
Android的devise不喜欢退出应用程序的select,而是由操作系统来pipe理它。 您可以通过相应的Intent调出Home应用程序:
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
也许你可以尝试这样的事情
假设在我们的应用程序中,我们有一些活动(比如说十),我们需要直接从这个活动中退出。 我们可以做的是,创build一个意图,去根本活动,并在意图设置标志
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
另外,添加一些额外的布尔意图
intent.putExtra("EXIT", true);
然后在根活动中,检查boolean
值的boolean
并根据调用finish(),在根活动的onCreate()
if (getIntent().getBooleanExtra("EXIT", false)) { finish(); }
System.exit(0);
可能是你在找什么。 它将closures整个应用程序并将您带到主屏幕。
首先使用方法finish();
完成你的应用程序finish();
然后在onDestroy删除强制closures添加下面的行
android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();
这对我很好。
closures所有以前的活动如下:
Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("Exit me", true); startActivity(intent); finish();
然后在MainActivity的onCreate()方法中添加这个来完成MainActivity
setContentView(R.layout.main_layout); if( getIntent().getBooleanExtra("Exit me", false)){ finish(); return; // add this to prevent from doing unnecessary stuffs }
如果你想结束一个活动,你可以简单地调用finish()
。 然而,在屏幕上有一个退出button是不好的做法。
一些活动,实际上你不想再次打开时,按下这样的飞溅屏幕活动,欢迎屏幕活动,确认窗口。 其实你不需要这个活动堆栈。 你可以使用=>打开manifest.xml文件来做到这一点,并添加一个属性
机器人:noHistory = “真”
到这些活动。
<activity android:name="com.example.shoppingapp.AddNewItems" android:label="" android:noHistory="true"> </activity>
要么
有时你想要closures整个应用程序在某个后退button按下。 这里最好的做法是打开主窗口,而不是退出应用程序。 为此,您需要重写onBackPressed()方法。 通常这种方法打开堆栈中的顶级活动。
@Override public void onBackPressed(){ Intent a = new Intent(Intent.ACTION_MAIN); a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); }
要么
在后退button中,您要退出该活动,并且也不希望将其添加到活动堆栈中。 在onBackPressed()方法内调用finish()方法。 它不会closures整个应用程序。 它将在堆栈中执行之前的活动。
@Override public void onBackPressed() { finish(); }
不build议退出您的Android应用程序。 看到这个问题的更多细节。
用户可以始终通过主页button退出应用程序,或通过后退button退出第一个活动。
(我尝试了以前的答案,但他们缺乏一些点,例如,如果你不做一个return;
在完成活动后,剩余的活动代码运行,你还需要编辑onCreate与返回如果你不运行super.onCreate ()你会得到一个运行时错误)
假设你有MainActivity
和ChildActivity
。
里面的ChildActivity添加这个:
Intent intent = new Intent(ChildActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); return true;
在MainActivity的onCreate里添加这个:
@Override public void onCreate(Bundle savedInstanceState) { mContext = getApplicationContext(); super.onCreate(savedInstanceState); if (getIntent().getBooleanExtra("EXIT", false)) { finish(); return; } // your current codes // your current codes }
还有一个select,使用FinishAffinity方法来closures与应用程序相关的堆栈中的所有任务。
请参阅: https : //stackoverflow.com/a/27765687/1984636
当你打电话完成onDestroy()该活动将被调用,它将返回到活动堆栈中的前一个活动…所以..退出不要调用finish();
finish();
后添加以下行finish();
在onDestroy()
:
android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();
这是我做的:
SomeActivity.java
@Override public void onBackPressed() { Intent newIntent = new Intent(this,QuitAppActivity.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(newIntent); finish(); }
QuitAppActivity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); }
基本上你所做的就是清除堆栈中的所有活动,并启动QuitAppActivity
,它的唯一工作就是退出应用程序。
我尝试使用下面的代码片段退出应用程序,这对我工作。 希望这可以帮助你。 我做了两个活动的小演示
第一次活动
public class MainActivity extends Activity implements OnClickListener{ private Button secondActivityBtn; private SharedPreferences pref; private SharedPreferences.Editor editer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn); secondActivityBtn.setOnClickListener(this); pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE); editer = pref.edit(); if(pref.getInt("exitApp", 0) == 1){ editer.putInt("exitApp", 0); editer.commit(); finish(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.SecondActivityBtn: Intent intent= new Intent(MainActivity.this, YourAnyActivity.class); startActivity(intent); break; default: break; } } }
你的任何其他活动
public class YourAnyActivity extends Activity implements OnClickListener { private Button exitAppBtn; private SharedPreferences pref; private SharedPreferences.Editor editer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_any); exitAppBtn = (Button) findViewById(R.id.exitAppBtn); exitAppBtn.setOnClickListener(this); pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE); editer = pref.edit(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.exitAppBtn: Intent main_intent = new Intent(YourAnyActivity.this, MainActivity.class); main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(main_intent); editer.putInt("exitApp",1); editer.commit(); break; default: break; } } }
我用观察者模式做了。
观察者界面
public interface Observer { public void update(Subject subject); }
基本主题
public class Subject { private List<Observer> observers = new ArrayList<Observer>(); public void attach(Observer observer){ observers.add(observer); } public void detach(Observer observer){ observers.remove(observer); } protected void notifyObservers(){ for(Observer observer : observers){ observer.update(this); } } }
子主题实现了退出方法
public class ApplicationSubject extends Subject { public void exit(){ notifyObservers(); } }
MyApplication你的应用程序应该扩展它
public class MyApplication extends Application { private static ApplicationSubject applicationSubject; public ApplicationSubject getApplicationSubject() { if(applicationSubject == null) applicationSubject = new ApplicationSubject(); return applicationSubject; }
}
基本活动
public abstract class BaseActivity extends Activity implements Observer { public MyApplication app; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); app = (MyApplication) this.getApplication(); app.getApplicationSubject().attach(this); } @Override public void finish() { // TODO Auto-generated method stub app.getApplicationSubject().detach(this); super.finish(); } /** * exit the app */ public void close() { app.getApplicationSubject().exit(); }; @Override public void update(Subject subject) { // TODO Auto-generated method stub this.finish(); } }
让我们testing一下
public class ATestActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); close(); //invoke 'close' } }
如果你想退出你的应用程序。 然后在你的button按下事件中使用这个代码。 喜欢:
public void onBackPressed() { moveTaskToBack(true); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); }
如果你想退出应用程序把这个代码放在你的函数下
public void yourFunction() { finishAffinity(); moveTaskToBack(true); } //For an instance, if you want to exit an application on double click of a //button,then the following code can be used. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) { // do something on back. From Android 16+ you can use the following: finishAffinity(); moveTaskToBack(true); } return super.onKeyDown(keyCode, event); }