活动启动模式
启动模式
1.standard
同一个页面可以打开多次
2.singleTop
打开页面直接处于栈顶
3.singleTask
会保证页面只打开一次
4.singleInstance
开启新的栈
获取当前活动技巧,
创建一个基础的类,
package activitytest.example.com.activitytest;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
/**
* Created by DianDoDo on 2017/9/4.
*/
public class BaseActivity extends AppCompatActivity{
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,getClass().getSimpleName());
}
}
其他的活动类,继承它,就可以在每次打开活动的时候,都能显示活动名称了
package activitytest.example.com.activitytest;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import android.widget.Button; // 引入才可以操作Button
import android.content.Intent;
public class FirstActivity extends BaseActivity {
private static final String TAG = "FirstActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"Task id is" +getTaskId());
setContentView(R.layout.first_layout); // 设置默认布局
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
}
@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:
break;
}
return true;
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"onRestart");
}
}
处理全部关闭
1.创建一个ActivityCollector类
package activitytest.example.com.activitytest;
import android.app.Activity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by DianDoDo on 2017/9/4.
*/
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
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();
}
}
}
}
2.在Base类中管理
package activitytest.example.com.activitytest;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
/**
* Created by DianDoDo on 2017/9/4.
*/
public class BaseActivity extends AppCompatActivity{
private static final String TAG = "BaseActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
3.活动中调用finishAll
package activitytest.example.com.activitytest;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ThirdActivity extends BaseActivity {
private static final String TAG = "ThirdActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"Task id is" +getTaskId());
setContentView(R.layout.third_layout);
Button button3 = (Button) findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.finishAll();
}
});
}
}
优化传参处理
SecondActivity 活动增加方法
public static void actionStart(Context context,String data1,String data2) {
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
活动一中调用,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"Task id is" +getTaskId());
setContentView(R.layout.first_layout); // 设置默认布局
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
// startActivity(intent);
SecondActivity.actionStart(FirstActivity.this,"data1","data2");
}
});
}
这样就可以方便的传参数了。