如何杀死进程?

时间:2011-05-07 18:15:29

标签: android process

我有两个活动,第一个活动是由Launcher启动的,第二个活动是由第一个启动的。当我从第一个活动中杀死进程时,该进程将被终止。但是当我从第二个活动中杀死它时,系统会立即启动一个新进程和第一个活动。 (进程的PID发生了变化。)我怎样才能干净利落?

我尝试了3种不同的方法来终止进程:System.exit(0),android.os.Process.killProcess(pid),以及非编程方式来自Eclipse的Devices面板。

以下是我体验过的两个世界上最简单的活动。它们都是各自文件中的外部类。

public class FirstActivity extends Activity  {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ((Button)findViewById(R.id.button)).setOnClickListener(
            new OnClickListener() {
                public void onClick(View v) {
                    startActivity(new Intent(FirstActivity.this, 
                        SecondActivity.class));
        }});
    }
}

public class SecondActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_2);
        ((Button)findViewById(R.id.button)).setOnClickListener( 
            new OnClickListener() {
                public void onClick(View v) {
                    // Method 1
                    int pid = android.os.Process.myPid();
                    android.os.Process.killProcess(pid);
                    // Method 2
                    System.exit(0);
        }});
    }
}

(我知道有人说永远不应该提供一个UI来退出程序。但这是出于安全原因。用户必须有办法退出程序并关闭文件,这样他的信息就不会被泄露。)

4 个答案:

答案 0 :(得分:6)

您可以尝试this.finish()

其他选择会在不通知android系统的情况下终止进程,而系统会假设用户想要做的事情已经崩溃并重新启动它。

但是你关于关闭阻止数据泄漏的活动的假设是错误的。如果您想提供一个注销按钮,请执行此操作并使其无法使用任何访问令牌/密钥来获取访问权限。

还要考虑如果其他活动在没有用户离开你的情况下进入前台会发生什么 - 例如,如果他们接到电话怎么办?

答案 1 :(得分:2)

只是我的想法,在你开始第二个活动(这一行)之后,

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

你可以杀死第一个活动。通过,

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

所以,现在第一项活动没有来。

另一种方式,

您可以获取第一个Activity的进程ID,并通过bundle将进程ID发送到第二个活动。

首先杀死第一个活动进程,然后杀死第二个活动进程。

所以,现在第一项活动没有来。

答案 2 :(得分:0)

我在Android中更新时遇到了这个问题。 我创建了两个活动并从一个布局切换到另一个布局但是当我杀死第二个活动的进程时,第一个活动将是resume();第一个布局将显示在显示屏上。

你的问题的回答是:在第一次活动恢复中你必须调用finish(); onResume()方法中的方法。

答案 3 :(得分:0)

System.exit(0);通过使用这个当前所有进程将被杀死