14

このトピックに関して多くの質問がありますが、明確な答えはありません。Android のメモリ管理は非常に堅実ですが、Android アプリケーションを強制終了してはいけないと多くの人が信じています。私の場合は違います。アプリケーションを閉じるオプションが必要です。アプリケーションを閉じるための次のコードを見つけましたが、機能しない場合があります。アプリケーションの終了ボタンを押すと、アプリケーションが更新されているようです。

MainActivity.java

@Override
    public void onDestroy()
    {
        super.onDestroy();
        /*
         * Notify the system to finalize and collect all objects of the
         * application on exit so that the process running the application can
         * be killed by the system without causing issues. NOTE: If this is set
         * to true then the process will not be killed until all of its threads
         * have closed.
         */
        System.runFinalizersOnExit(true);

        /*
        * Force the system to close the application down completely instead of
        * retaining it in the background. The process that runs the application
        * will be killed. The application will be completely created as a new
        * application in a new process if the user starts the application
        * again.
        */
        System.exit(0);
    }

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
   case R.id.close:
                Intent intentFinish = new Intent(this, FinishActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intentFinish);
                finish();
                return true;
}
return super.onMenuItemSelected(featureId, item);
}

FinishActivity.java

package com.mypackage;

import android.app.Activity;
import android.os.Bundle;

public class FinishActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        finish();
    }
}

私も試しProcess.killProcess(Process.myPid());ましたがうまくいきません。

4

6 に答える 6

34

私は自分の解決策を見つけました。これを使用してアプリケーションを閉じます

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
于 2012-04-07T04:37:51.090 に答える
10
public void endTask() {
    // Is the user running Lollipop or above?
    if (Build.VERSION.SDK_INT >= 21) { 
        // If yes, run the fancy new function to end the app and
        //  remove it from the task list.
        finishAndRemoveTask();
    } else {
        // If not, then just end the app without removing it from
        //  the task list.
        finish();
    }
}
于 2015-02-11T18:14:19.977 に答える
4

を使用System.exit(0);したことがある場合は、使用しないことをお勧めします。それを使用するのは良いプログラミング スタイルではありません。finish();アクティビティの実行を終了するためにアクティビティで呼び出されるメソッドがあります。あなたはそれを使うべきです。

Process.killProcess(Process.myPID());使用することも好ましくありません。

于 2012-04-02T10:36:08.037 に答える
1

アクティビティを終了したい場合は、Lucifer が提案したように、アクティビティの finish() メソッドを使用します。現在のアクティビティを終了するだけです。ただし、アプリケーションを終了する (ホーム画面までのすべてのアクティビティを破棄する) 場合は、次のコード ブロックを使用します。

Intent intent=new Intent(this, HomeClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2012-04-02T10:42:39.577 に答える
1
switch(item.getItemId()) {
case R.id.close:
            Intent intentFinish = new Intent(this,FinishActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intentFinish);
            finish();
            return true;
}

それ自体を終了するアクティビティ (FinishActivity) を呼び出してから、現在のアクティビティ (MainActivity) で finish() を呼び出すのはなぜですか。メイン アクティビティの終了は無意味です。

于 2012-04-02T10:42:57.303 に答える
0
@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode == KeyEvent.KEYCODE_BACK)
        {
            finish();
            return true;
        }
        else{
            return super.onKeyUp(keyCode, event);
        }
    }

アプリの起動時に起動される最初のアクティビティで上記のメソッドを使用します

于 2012-04-02T10:49:26.947 に答える