2011-05-07 163 views
3

我有两项活动,第一项活动由启动器启动,第二项活动由第一项启动。当我在第一个灵敏度内杀死进程时,进程被终止。但是当我从第二项活动中杀死它时,系统会立即启动一个新流程和第一项活动。 (该进程的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退出程序,但是这是出于安全原因,用户必须有办法退出程序并关闭文件,以便赢得了他的信息“T被泄露。)

+0

考虑用startActivityForResult开始第二个活动,然后使用setResult和finish()将第二个活动的消息传回第一个活动。然后在onActivityResult中捕获消息。打开信息并打电话完成?如果有必要,在第一次活动。 – JAL 2011-05-07 20:13:48

回答

6

您可以尝试this.finish()

其他选择杀不通知的android系统,它假设一些用户想要做的已经崩溃并重新启动它的进程。

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

还想一下,如果某些其他活动在没有用户退出的情况下进入前台会发生什么情况 - 例如,如果他们接到电话会怎么样?

+0

感谢您的回复。我想过使用finish()但还没有尝试过。但就我而言,在开始第二项活动之前使用finish()并不是一个解决方案 - 他可能想回去。所以唯一的方法是:在杀死第二项活动之前,如果可能的话,我需要清理系统的历史。 (注销意味着他不想(也不能)再使用该软件,那么为什么还要在系统中留下一个无用的过程呢?这就是为什么我要彻底杀死它。应用程序有一个计时器,以杀死进程,当它在后台,或在FG中不活动。) – wwyt 2011-05-07 19:55:37

+1

它取决于android,而不是你决定杀死你的进程 - 这就是它的工作原理,而且你发现与它战斗并没有'工作 – 2011-05-07 20:43:10

0

我已经有了这个问题,而我更新的Android。 我已经创建了两个活动,并从一个布局切换到另一个布局,但是当我杀死第二个活动的过程时,第一个活动将恢复();并显示第一个布局。

你的问题的答案是:在第一次活动简历你必须打完();方法onResume()方法。

2

只是我的想法,在启动第二个活动(此行),

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

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

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

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

的另一种方式,

你可以第一个活动的进程ID和发送的进程id到第二个活动,通过捆绑。

首先杀死第一个活动过程,然后你可以杀死第二个活动过程。

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

0

系统。出口(0);通过使用此全部当前进程将被kill