Android程序:随时随地退出程序

来源:互联网 发布:de0 nano linux 编辑:程序博客网 时间:2024/05/16 10:16
如果目前你手机的界面还停留在ThirdActivity,你会发现当前想退出程序是非常不方便的,需要连按三次Back键才行。按Home键只是把程序挂起,并没有退出程序。其实这个问题就足以引起你的思考,如果我们的程序需要一个注销或者退出的功能该怎么办呢?必须要有一个随时随地都能退出程序的方案才行。其实解决思路也很简单,只需要用一个专门的集合类对所有的活动进行管理就可以了,下面我们就来实现一下。新建一个ActivityCollector类作为活动管理器,代码如下所示:
public class ActivityCollector {    public static List<Activity> activities = new ArrayList<Activity>();    public static void addActivity(Activity activity){        activities.add(activity);    }    public static void removeActivity(Activity activity){        activities.remove(activity);    }    public static void finishAll(){        for (Activity activity:activities){            if (!activity.isFinishing()){                activity.finish();            }        }    }}

在活动管理器中,我们通过一个List来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部都销毁掉。
接下来修改BaseActivity中的代码,如下所示:

public class BaseActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        Log.d("BaseActivity",getClass().getSimpleName());        ActivityCollector.addActivity(this);    }    @Override    protected void onDestroy(){        super.onDestroy();        ActivityCollector.removeActivity(this);    }}
在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。例如在ThirdActivity界面想通过点击按钮直接退出程序,只需将代码改成如下所示:
public class ThirdActivity extends BaseActivity {    @Override    protected void onCreate(Bundle saveInstanceState){        super.onCreate(saveInstanceState);        Log.d("ThirdActivity","Task id is " + getTaskId());        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.layout3);        Button button3 = (Button)findViewById(R.id.button3);        button3.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ActivityCollector.finishAll();            }        });    }}

当然你还可以在销毁所有活动的代码后面再加上杀掉当前进程的代码,以保证程序完全退出。

0 0