ホームページにアプリケーション内を移動するためのボタンがあるアプリケーションがあります。
そのページには「EXIT」ボタンがあり、クリックすると、アプリケーションアイコンがある電話のホーム画面にユーザーが移動します。
どうやってやるの?
ホームページにアプリケーション内を移動するためのボタンがあるアプリケーションがあります。
そのページには「EXIT」ボタンがあり、クリックすると、アプリケーションアイコンがある電話のホーム画面にユーザーが移動します。
どうやってやるの?
Android の設計では、選択によってアプリケーションを終了するのではなく、OS によってアプリケーションを管理します。対応するインテントによってホーム アプリケーションを起動できます。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
このようなことを試すことができるかもしれません
私たちのアプリケーションに多数のアクティビティ (たとえば 10 個) があり、このアクティビティから直接終了する必要があるとします。できることは、インテントを作成し、ルート アクティビティに移動して、インテントに次のようにフラグを設定することです。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
また、ブール値のようなものをインテントに追加します
intent.putExtra("EXIT", true);
次に、ルート アクティビティで、ルート アクティビティの値を確認し、finish boolean() の呼び出しに従ってonCreate()
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
System.exit(0);
おそらくあなたが探しているものです。アプリケーション全体が閉じて、ホーム画面に移動します。
最初にメソッドを使用してアプリケーションを終了しますfinish();
次に、強制終了を削除するために onDestroy に以下の行を追加します
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
アクティビティを終了したい場合は、 を呼び出すだけfinish()です。ただし、画面に終了ボタンを配置するのはお勧めできません。
スプラッシュ スクリーン アクティビティ、ウェルカム スクリーン アクティビティ、確認ウィンドウなど、戻るボタンが押されたときに実際に再度開きたくないアクティビティもあります。実際には、これはアクティビティ スタックでは必要ありません。=> manifest.xml ファイルを開き、属性を追加してこれを行うことができます
android:noHistory="true"
これらの活動に。
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
また
特定の戻るボタンを押して、アプリケーション全体を閉じたい場合があります。ここでのベスト プラクティスは、アプリケーションを終了するのではなく、ホーム ウィンドウを開くことです。そのためには、 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);
}
また
戻るボタンを押すと、そのアクティビティを終了したいだけでなく、これをアクティビティ スタックに追加したくありません。onBackPressed() メソッド内で finish() メソッドを呼び出します。アプリケーション全体を閉じることはありません。スタック内の前のアクティビティに移動します。
@Override
public void onBackPressed() {
finish();
}
Android アプリケーションを終了することはお勧めしません。詳細については、この質問を参照してください。
ユーザーは、ホーム ボタンを使用するか、最初のアクティビティで [戻る] ボタンを使用して、いつでもアプリを終了できます。
(以前の回答を試しましたが、いくつかの点が欠けています。たとえば、return;終了後のアクティビティを実行しないと、残りのアクティビティ コードが実行されます。また、onCreate を return で編集する必要があります。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
}
そのアクティビティのfinish onDestroy()を呼び出すと、呼び出され、アクティビティスタック内の前のアクティビティに戻ります...つまり、終了するにはfinish()を呼び出さないでください。
これが私がしたことです:
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基本的に、あなたがしたことは、タスクを終了するスタックと起動からすべてのアクティビティをクリアすることです。
finish();in の後に次の行を追加しますonDestroy()。
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
次のコード スニペットを使用してアプリケーションを終了しようとしましたが、これでうまくいきました。これがお役に立てば幸いです。私は2つの活動で小さなデモをしました
最初の活動
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);
}
}
}
子サブジェクトは exit メソッドを実装します
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();
}
}
テストしましょう
public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
close(); //invoke 'close'
}
}
100% 正常に動作します。これは、onClick でアプリを終了するためのコードです (メソッド)
Button exit = (Button)findViewById(R.id.exitbutton);
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();
}
});
アプリケーションを終了したい場合。次に、ボタンが押されたイベント内でこのコードを使用します。 お気に入り:
public void onBackPressed()
{
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}