199

ホームページにアプリケーション内を移動するためのボタンがあるアプリケーションがあります。

そのページには「EXIT」ボタンがあり、クリックすると、アプリケーションアイコンがある電話のホーム画面にユーザーが移動します。

どうやってやるの?

4

22 に答える 22

331

Android の設計では、選択によってアプリケーションを終了するのではなく、OS によってアプリケーションを管理します。対応するインテントによってホーム アプリケーションを起動できます。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
于 2010-07-12T08:00:51.427 に答える
74

このようなことを試すことができるかもしれません

私たちのアプリケーションに多数のアクティビティ (たとえば 10 個) があり、このアクティビティから直接終了する必要があるとします。できることは、インテントを作成し、ルート アクティビティに移動して、インテントに次のようにフラグを設定することです。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

また、ブール値のようなものをインテントに追加します

intent.putExtra("EXIT", true);

次に、ルート アクティビティで、ルート アクティビティの値を確認し、finish boolean() の呼び出しに従ってonCreate()

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
于 2012-03-16T10:23:39.823 に答える
31
System.exit(0);

おそらくあなたが探しているものです。アプリケーション全体が閉じて、ホーム画面に移動します。

于 2012-05-14T12:48:07.017 に答える
23

最初にメソッドを使用してアプリケーションを終了しますfinish();

次に、強制終了を削除するために onDestroy に以下の行を追加します

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
于 2012-11-05T14:06:47.647 に答える
20

アクティビティを終了したい場合は、 を呼び出すだけfinish()です。ただし、画面に終了ボタンを配置するのはお勧めできません。

于 2010-07-12T09:18:16.607 に答える
17

スプラッシュ スクリーン アクティビティ、ウェルカム スクリーン アクティビティ、確認ウィンドウなど、戻るボタンが押されたときに実際に再度開きたくないアクティビティもあります。実際には、これはアクティビティ スタックでは必要ありません。=> 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();
}
于 2014-04-10T09:10:24.460 に答える
16

Android アプリケーションを終了することはお勧めしません。詳細については、この質問を参照してください。

ユーザーは、ホーム ボタンを使用するか、最初のアクティビティで [戻る] ボタンを使用して、いつでもアプリを終了できます。

于 2010-07-12T07:16:38.610 に答える
5

(以前の回答を試しましたが、いくつかの点が欠けています。たとえば、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
}
于 2014-01-16T22:40:21.560 に答える
3

そのアクティビティのfinish onDestroy()を呼び出すと、呼び出され、アクティビティスタック内の前のアクティビティに戻ります...つまり、終了するにはfinish()を呼び出さないでください。

于 2012-03-08T05:09:02.870 に答える
3

これが私がしたことです:

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基本的に、あなたがしたことは、タスクを終了するスタックと起動からすべてのアクティビティをクリアすることです。

于 2017-01-04T11:33:28.957 に答える
0

finish();in の後に次の行を追加しますonDestroy()

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
于 2012-12-31T17:44:26.060 に答える
0

次のコード スニペットを使用してアプリケーションを終了しようとしましたが、これでうまくいきました。これがお役に立てば幸いです。私は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;
        }
    }
}
于 2013-03-26T17:32:05.950 に答える
0

オブザーバーモードでやりました。

オブザーバー インターフェイス

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'
}
}
于 2013-05-02T07:27:42.780 に答える
0

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();

        }
    });
于 2018-06-19T12:54:54.710 に答える
-2

アプリケーションを終了したい場合。次に、ボタンが押されたイベント内でこのコードを使用します。 お気に入り:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
于 2015-09-14T18:36:32.173 に答える