1.Android的日志工具
Log.v() 打印琐碎,最小日志,级别最低
Log.d() 打印调试信息,对应debug,比verbose高一级
Log.i() 打印比较重要的数据,级别对应 info,比debug高一级
Log.w() 打印警告信息,级别warn,比info高一级
Log.e() 打印错误信,级别error ,级别比info高一级
2.Activity
(1)创建一个Activity界面
public class FirstActivity extends Activity{
protected void onCreate(Bundle saveInstanceStace){
super.onCreate(saveInstanceStace);
setContentView(R.layout.first);//找到first.xml文件
}
}
启动一个活动必须要在AndroidManifest文件中注册
如果是第一个要启动的Activity在AndroidManifest的<application>代码如下:
<activity
android:name=".FirstActivity"
android:lable = "This is FirstActivity"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
隐藏标题栏: 在setContentView()上面添加一行代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
(2)Activity的生命周期
onCreate() —> onStart() —> onResume() —> onPause() —> onStop() —> onDestory() 完整的生命周期/onRestart()
完整生命周期如下图
两个Activity之间互相切换的Activity之间切换 如图所示
如果活动被回收,调用onSaveInstanceState(Bundle bundle )方法,它会携带一个Bundle类型的参数当活动被回收之前,如果有通过这个方法保存话 onCreate(Bundle bundle)中的Bundle会带有之前所保存的全部数据。取出值做相应操作就可以了。
(3)活动的启动模式
standard 默认的启动模式 (每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置)
eg:举个例子,新建一个FirstActivity页面有一个按钮,点击按钮就再次启动这个Activity,我们连续点击按钮两次,然后此时返回栈中就会存在三个FirstActivity的实例,需要连续按三次back键才能退出程序。
singleTop (在启动活动时如果发现返回栈栈顶已经是该活动,则认为可以直接使用它,不会在创建新的实例)
eg:创建FirstActivity (A)和SecondActivity(B) 在A这个活动里创建两个按钮第一个按钮是跳转到first界面,第二个按钮是跳转到second界面,然在B这个活动里创建一个按钮,跳转到first界面去,开始执行A ,点击第一个按钮,在按下back键就退出程序了是因为返回栈里面已经有一个A,如果点击第二个按钮就会跳转到second界面,返回栈中创建一个B实例,然后点击B中按钮,就会跳转到first界面,返回栈中就会添加一个A实例,是因为B上面不是A所以会再创建一个实例。
singleTask(每次启动活动时系统首先会在返回栈中检查是否有该活动的实例有的话直接使用,并把在这个活动之上的活动统统出栈,如果没有发现就会在创建一个实例)
eg:创建FirstActivity(A)和SecondActivity(B) 在A这个活动里创建一个按钮是跳转到second界面,然在B这个活动里创建一个按钮跳转到first界面,点击A中的按钮跳转到second中,然后点击B中的按钮,此时会在返回栈中查找是否有该实例,如果找到就把该实例之上的活动统统出栈,此时B出栈,A就会在栈顶,就会跳转到A的界面上去,如果没找到的话就再创建一个新的实例。
singleInstance(会启用一个新的返回栈来管理这个活动)
eg:修改SecondActivity AndroidManifest中的launchMode为singleInstance,其他默认standard,创建FirstActivity (A)和SecondActivity(B) ThirdActivity 在A这个活动里创建一个按钮是跳转到second界面,然在B这个活动里创建一个按钮跳转到third界面,点击A中的按钮跳转到second中(B会自动创建一个新的返回栈一个新的实例),然后点击B中的按钮跳转到third界面中,如果此时按下返回键third就会关闭,然后显示的就是first界面而不是second界面(因为它们在一个返回栈中),然后再按下back键就会关闭first,显示second界面,在按下back程序就会自动退出。
(4)Activity的启动和关闭
<<活动的启动
构建一个Intent意图,然后用startActivity()或者,startActivityForResult()(传送数据),方法来启动一个活动.
启动活动的最佳写法:
假设在你写的SecondActivity中需要传递两个重要的参数,最好直接写一个可以传递参数的方法
public class SecondActivity extends Activity {
public void actionStart(Context context,String data1,String data2){Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra("data1",data1);
intent.putExtra("data2",data2);
startActivity(intent);
}
}
然后在FirstActivity中
button.setOnClickListener(new OnClickListener(){
public void onClick(View v){
SecondActivity second = new SecondActivity();
second.actionSrart(FirstActivity.this,"data1","data2");
}
});
这样写的好处是一目了然,不需要经常去询问编写SecondActivity的人,启动另一个活动也变得简单。
<<活动的关闭
关闭一个Activity的最简单的方法就是调用finish()方法;
打开了好多程序想随时随地要想退出整个程序方法:
public class ActivityCollector extends Application {
private static ActivityCollector instance;
private ActivityCollector() {}
public synchronized static ActivityCollector getInstance() {
if (null == instance) {
instance = new ActivityCollector();
}
return instance;
}
//通过list暂存活动
public List<Activity> activities = new ArrayList<Activity>();
//add方法向list中添加活动
public void addActivity(Activity activity){
activities.add(activity);
}
//remove方法向list中移除活动
public void removeActivity(Activity activity){
activities.remove(activity);
}
//用于将list中存储的活动全部销毁掉
public void finishAll(){
try {
for (Activity activity : activities) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
}
在一个活动的onCreate()方法中调用ActivityCollector.getInstance().addActivity(this);方法就把这个Activity添加到了活动管理器中,
如果在这个活动中复写onDestory()并调用ActivityCollector.getInstance().removeActivity()方发就表明将一个马上要销毁的活动从活动管理器中移除。
不管在什么地方退出程序,只要之前的这些活动都在活动管理器中,只需要在活动的onClick中调用ActivityCollector.getInstance().finishAll()就可以了。
button.setOnClickListener(new OnClickListener(){
public void onClick(View v){
ActivityCollector.getInstance().finishAll();
});
--------------------------------------
笔者水平有限,若有错漏,欢迎指正