活动的最佳实践
知晓当前是在哪一个活动
-
新建一个普通类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");
}
});
}