随时随地退出程序

部分摘自《第一行代码》郭霖

1.找到当前界面所使用的活动

新建一个类继承Activity,重写其onCreate()方法
public class BaseActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("BaseActivity" , getClass().getSimpleName());
    }
}
· 让BaseActivity成为项目中所有活动的父类,运行项目。在Android Monitor ->Error下就能
看到当前界面用的活动。

2.随时随地退出程序

新建一个活动管理器类
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();
            }
        }
    }

定义每个活动需要继承的父类

public class faActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}

之后不管在什么地方,只要调用ActivityCollector.finishAll();方法就可以了退出程序了

注:

finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。

System.exit();和android.os.Process.killProcess(android.osProcess.myPid());

结束当前组件如Activity,并立即释放当前Activity所占资源。

网上几种退出方式测试:

public class BaseActivity extends Activity implements View.OnClickListener{

    public static void actionStart(Context context , String data1 , String data2){
        Intent intent = new Intent(context ,BaseActivity.class);
        intent.putExtra("name1" , data1 );
        intent.putExtra("name2" , data2);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.baseactivity);
        Button one = (Button) findViewById(R.id.one);
        Button two = (Button) findViewById(R.id.two);
        Button three = (Button) findViewById(R.id.three);
        Button four = (Button) findViewById(R.id.four);
        one.setOnClickListener(this);
        two.setOnClickListener(this);
        three.setOnClickListener(this);
        four.setOnClickListener(this);
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.one:
                android.os.Process.killProcess(android.os.Process.myPid());
//                killProcess
                break;
            case R.id.two:
                System.exit(0);
                break;
            case R.id.three:
                ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
                am.restartPackage(getPackageName());
                break;
            case R.id.four:
                ActivityCollector.finishAll();
//                android.os.Process.killProcess(android.os.Process.myPid());
                break;
            default:
                break;
        }
    }
}

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button mbutton = (Button) findViewById(R.id.mbutton);
        mbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BaseActivity.actionStart(MainActivity.this , "data1" , "data2");
            }
        });
    }
}

结果:1,2会杀死当前Activity并重建MainActivity界面。3已无效,4成功退出。


猜你喜欢

转载自blog.csdn.net/dk123sw/article/details/52410854