活动的最佳实践

活动的最佳实践

知晓当前是在哪一个活动

  • 新建一个普通类BaseActivity,无需在AndroidManifest.xml内注册,让其继承AppCompatActivity类,修改FristActivity、SecondActivity、ThirdActivity让三者继承BaseActivity类,因为BaseActivity继承了AppCompatActivity所以FristActivity、SecondActivity、ThirdActivity也会继承了Activity的所有特性,其功能也不会受影响

    //BaseActivity类
    public class BaseActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //获取当前实例的类名,并打印出来
            Log.d("BaseActivity", getClass().getSimpleName());
        }
    }
    
    //FristActivity继承BaseActivity
    public class FristActivity extends BaseActivity {
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.d("FristActivity", "onRestart");
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //打印当前活动的实例
            Log.d("FristActivity","This id is" + getTaskId());
            setContentView(R.layout.frist_layout);
            //通过findViewById找到Button实例
            Button button1 = (Button) findViewById(R.id.button_1);
            //setOnClickListener给按钮注册一个监听器,点击按钮时执行监听中的onClick时间,弹出Toast
            button1.setOnClickListener(new View.OnClickListener() {
    
                //在FristActivity活动上面启动FristActivity活动
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(FristActivity.this,SecondActivity.class);
                    startActivity(intent);
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu){
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()){
                case R.id.add_item:
                    Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.remove_item:
                    Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                    break;
                default:
            }
            return true;
    
        }
    }
    
    //SecondActivity继承BaseActivity
    public class SecondActivity extends BaseActivity {
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.d("SecondActivity", "onDestroy");
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("SecondActivity", "This id is" + getTaskId());
            setContentView(R.layout.second_layout);
            Button button2 = (Button) findViewById(R.id.button_2);
            button2.setOnClickListener(new View.OnClickListener() {
    		  @Override
                public void onClick(View v) {
                    Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
                    startActivity(intent);
                }
    
            });
        }
    }
    
    //ThirdActivity继承BaseActivity
    public class ThirdActivity extends BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("ThirdActivity", "Task id is" + getTaskId());
            setContentView(R.layout.third_layout);
        }
    }
    
    • 总结:每当我们进入一个新的活动界面,通过BaseActivity类,该活动的类名就会打印出来,这样就知晓当前处于哪一个活动了

      在这里插入图片描述

随时随地退出程序

  • 新建一个ActivityCollector类作为一个活动管理器,无需在AndroidManifest.xml注册,用一个专门的集合类对所有活动进行管理

    //ActivityCollector类
    public class ActivityCollector {
        //通过List来暂存活动
        public static List<Activity> activities = new ArrayList<>();
    	//addActivity()方法用于向List中添加一个活动
        public static void addActivity(Activity activity){
            activities.add(activity);
        }
    	//removeActivity()方法用于在List中存储的活动全部删除
        public static void removeActivity(Activity activity){
            activities.remove(activity);
        }
    	//finishAll()方法用于将List中的活动全部销毁掉
        public static void finishAll(){
            for (Activity activity : activities){
                if (!activity.isFinishing()){
                    activity.finish();
                }
            }
        }
    }
    
    //BaseActivity类
    public class BaseActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //获取当前实例的类名,并打印出来
            Log.d("BaseActivity", getClass().getSimpleName());
            //调用ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里
            ActivityCollector.addActivity(this);
        }
    	//重写了onDestroy()方法
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //调用了ActivityCollector的removeActivity()方法,表明将一个马上药效会的活动从活动管理器里删除
            ActivityCollector.removeActivity(this);
        }
    }
    
    //ThirdActivity 点击按钮直接退出程序
    public class ThirdActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("ThirdActivity", "Task id is" + getTaskId());
            setContentView(R.layout.third_layout);
            Button button = (Button) findViewById(R.id.button_3);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //直接调用ActivityCollector.finishAll()可以直接退出程序,销毁所有活动
                    ActivityCollector.finishAll();
                    //以下这行代码是在销毁所有活动后,再加上杀掉当前进程的代码,以保证程序完全退出
                    //killProcess()方法用于杀掉一个进程,他接收一个进程id参数,可以通过myPid()方法来获取当前的进程id,需要注意的是killProcess()方法只能用于杀掉当前程序的进程,不能杀掉其他程序
                    //android.os.Process.killProcess(android.os.Process.myPid());
                    
                }
            });
        }
    }
    

启动活动的最佳写法

//SecondActivity增加以下代码

//添加一个actionStart()方法,
public static void actionStart(Context context,String datal,String data2){
    //在其中完成Intent的构建,
    Intent intent = new Intent(context,SecondActivity.class);
    //并将传递过来的参数保存到Intent里,
    intent.putExtra("param1",datal);
    intent.putExtra("param2",data2);
    //调用startActivity()启动SecondActivity
    context.startActivity(intent);
    //打印传递过来的数据
    Log.d("param",data1);
    Log.d("param",data2);
}

//FristActivity启动SecondActivity活动,并传递数据
public class FristActivity extends BaseActivity {
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("FristActivity", "onRestart");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //打印当前活动的实例
        Log.d("FristActivity","This id is" + getTaskId());
        setContentView(R.layout.frist_layout);
        //通过findViewById找到Button实例
        Button button1 = (Button) findViewById(R.id.button_1);
        //setOnClickListener给按钮注册一个监听器,点击按钮时执行监听中的onClick时间,弹出Toast
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               SecondActivity.actionStart(FristActivity.this,"data111111","data222222");
            }
        });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值