Activity是android五大组件之一,其他四个分别是Service、ContentProvider、Fragment、BroadcastReceiver,Activity再一个app运行中起到很大的作用,通常我们可以将之理解为一个屏幕。
在本文中,主要是回顾课堂上Activity如下知识:Activity的配置和使用、ActionBar的配置和使用、Activity的生命周期、Activity切换与传值、Activity的四种启动模式,以及综合实例
Activity的配置和使用
创建一个Activity,可继承自AppCompatActivity,,还需要在清单文件里面注册这个Activity(如果需要的话,还需要设置是否为启动的Activity)、设计好布局
ActionBar的配置和使用
1、ActionBar位于Activity的顶部,可用来显示activity的标题、Icon等其他需要交互的元素
2、ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用Support Library v7
3、在Api 21以上,还可以修改更多的主题风格,包括textColorPrimary、colorPrimary(默认)、statusBarColo、colorPrimaryDar(默认)、colorAccent(默认)、windowBackground、navigationBarColor
Activity的生命周期
1、启动:先后执行onCreate()->onStart()->onResume三个方法
2、按BACK键:onPause()->onStop()->onDestory()
3、按HOME:先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁
4、再次打开app:分别执行了onRestart()->onStart()->onResume()三个方法
Activity切换与传值(Intent使用)
1、Intent(意图、意向):组件之间相互调用和传递参数的类,Activity的直接通讯是通过Intent进行的。
2、传值:通过Intent的putExra()方法,并在另一个接收Intent的Activity中调用getIntent()方法
3、传递自定义对象:
第一步:所传的对象 实现接口 Serializable
第二步:传递对象的原始页面调用intent.putExtra()即可
第三步:接收对象的界面使用getIntent().getSerializableExtra()获取对象(或者通过bundle.getSerializable(key))来获取
Activity的四种启动模式
1、启动模式简单的说是Activity启动时的策略,在清单文件中的使用android:launchMode属性设置;
2、启动模式分成4种:standard, singleTop, singleTask, singleInstance
standard:如果当前Activiity再次启动自己,则把创建一个新的Activity实例放进任务栈
singleTop:当前Activity自己再次启动自己,任务栈的栈顶是本身,不会创建新的
当其他Acticity启动这个用singleTop模式的Activity的时候,会创建新的实例
singleTask:如果要激活的那个Activity在任务栈中已经存在,则不需要创建,只需要把Activity调整到栈顶,并且把Activity以上的Activity实例都推出栈顶(pop)
应用场景:可以用来退出整个应用,具体步骤为:
将主Activity设为SingleTask模式,然后在要退出的Activity中转到主Activity,然后重写Activity的onNewIntent函数,并在函数里面加上一句finish()即可
singleInstance:多个应用需要共享Activity实例
综合实例
先看运行效果:
核心代码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
</activity>
<activity android:name=".FightActivity">
</activity>
<activity android:name=".FightSecondActivity">
</activity>
<activity android:name=".LifeBaseActivity">
</activity>
<activity android:name="com.example.administrator.lauchermode.Main2Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.administrator.lauchermode.standardActivity"
android:launchMode="standard" />
<activity
android:name="com.example.administrator.lauchermode.singleTopActivity"
android:launchMode="singleTop" />
<activity
android:name="com.example.administrator.lauchermode.singleTaskActivity"
android:launchMode="singleTask" />
<activity android:name="com.example.administrator.lauchermode.switchedActivity" />
<activity android:name="com.example.administrator.lauchermode.switchedAndPassParaActivity" />
<activity android:name="com.example.administrator.lauchermode.switchedAndPassObjActivity" />
<activity android:name="com.example.administrator.lauchermode.logCatActivity"></activity>
</application>
</manifest>
package com.example.administrator.lauchermode;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.administrator.myapplication.LifeBaseActivity;
import com.example.administrator.myapplication.R;
import com.example.administrator.myapplication.User;
public class Main2Activity extends AppCompatActivity {
//Standard、SingleTop、SingleTask启动
Button btn1 = null;
Button btn2 = null;
Button btn3 = null;
//切换页面、切换并传值、切换并传递对象、LogCat日志、生命周期
Button btn4 = null;
Button btn5 = null;
Button btn6 = null;
Button btn7 = null;
Button btn8 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn1 = (Button) findViewById(R.id.btnStandard);
btn2 = (Button) findViewById(R.id.btnSingleTop);
btn3 = (Button) findViewById(R.id.btnSingleTask);
btn4 = (Button) findViewById(R.id.swtichPage);
btn5 = (Button) findViewById(R.id.swtichPageAndPassPara);
btn6 = (Button) findViewById(R.id.swtichPageAndPassObj);
btn7 = (Button) findViewById(R.id.logcat);
btn8 = (Button) findViewById(R.id.lifeBase);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,standardActivity.class);
startActivity(intent);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,singleTopActivity.class);
startActivity(intent);
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,singleTaskActivity.class);
startActivity(intent);
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,switchedActivity.class);
startActivity(intent);
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,switchedAndPassParaActivity.class);
intent.putExtra("name","张三");
intent.putExtra("age","30");
startActivity(intent);
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,switchedAndPassObjActivity.class);
User user = new User("张三",20,180,true);
intent.putExtra("user",user);
startActivity(intent);
}
});
btn7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,logCatActivity.class);
startActivity(intent);
}
});
btn8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Main2Activity.this,LifeBaseActivity.class);
startActivity(intent);
}
});
}
}
singleTaskActivity java
package com.example.administrator.lauchermode;
import android.content.Intent;
import android.content.SyncAdapterType;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.example.administrator.myapplication.R;
public class singleTaskActivity extends AppCompatActivity {
Button btn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_task);
setTitle("singleTask");
btn = (Button) findViewById(R.id.btnLaucherSelfBySingleTask);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(singleTaskActivity.this,Main2Activity.class);
startActivity(intent);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
System.out.println("----------------onNewIntent()----------------");
// Log.d("执行OnNewIntent()方法","OnNewIntent()...")
finish();
}
}
package com.example.administrator.lauchermode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.example.administrator.myapplication.R;
import com.example.administrator.myapplication.User;
public class switchedAndPassObjActivity extends AppCompatActivity {
TextView tvObj = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switched_and_pass_obj);
setTitle("切换页面并传递对象");
tvObj = (TextView) findViewById(R.id.tvObj);
User user = (User) getIntent().getSerializableExtra("user");
if (user != null) {
Toast.makeText(this, "name:"+user.getAge()+"\nage:"+user.getAge()+"\nheight:"+
user.getHeight()+"\nmale? "+user.isGender(), Toast.LENGTH_SHORT).show();
tvObj.setText("name:"+user.getAge()+"\nage:"+user.getAge()+"\nheight:"+
user.getHeight()+"\nmale? "+user.isGender());
} else {
Toast.makeText(this,"传值失败",Toast.LENGTH_SHORT).show();
}
}
}