四大组件基本用法与介绍(1)--activity

四大组件分为:activity、service、content provider、broadcast receiver。
一、activity --活动
1.acitivity 生命周期

1) 完整生命周期 onCreate onDestroy 一头一尾
2) 可视化生命周期 onStart onStop (onRestart)
3) 前台声明周期 onResume onPause
启动顺序:onCreate()——>onStart()——>onResume()
销毁顺序:
(情况一)onPause()——><Process Killed>

  (情况二)onPause()——>onStop()——><Process Killed>

  (情况三)onPause()——>onStop()——>onDestroy()

存储数据放在:onPause();
意外关闭 : onSaveInstanceState(Bundle outState)
代码如下:
// 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("temp", temp);
}
在下次主窗口的onCreate()方法中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null
if (savedInstanceState != null) {
temp = savedInstanceState.getString("temp");
System.out.println("onCreate: temp = " + temp);
}
}

2 activity启动的四种模式
首先了解下任务栈:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序
(1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例
(3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop
(4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例
退出所有活动的方法:
1.将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。
2.通过给每个activity注册一个广播,然后要退出所有程序时,只要发送这个广播即可。

3.activity的跳转 : startActivity(intent); startActivityForResult(mIntent, requestCode);---推荐使用该方法
//先设置好意图 和 请求码
requestCode = 0;
startActivityForResult(mIntent, requestCode);


//第二个activity 通过意图传递数据,设好请求码
this.setResult(resultCode, mIntent);

//重写该方法 处理请求码
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if(requestCode==2){
if(resultCode==RESULT_OK){
String location = data.getStringExtra("location");
TextView tv = (TextView)this.findViewById(R.id.textView1);
tv.setText("所在位置为:"+location);
}else{
Toast.makeText(this, "取消定位", Toast.LENGTH_LONG ).show();
}
}
}




4. activty 线程间通讯 Handler + (新线程)sendMessage + (ui线程)handleMessage
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 2秒后,跳转到后台页面
// 注意,千万不要在主线程中做一些耗时间的,会阻塞窗口渲染的工作.要做,就放在新的线程中做

new Thread(){
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
//finish();
};
}.start();
*/

/*
Timer t = new Timer();
t.schedule(new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
finish();
}
}, 5000);


Handler handler = new Handler();
handler.postDelayed(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, IndexActivity.class);
startActivity(i); // android中有一个堆栈[A]
finish();
}
}, 4000);
}


5.使用 ActivityUtils + baseActivity
我们定义一个基类活动,然后在配合一个活动集合的工具类把所有活动都添加进去,面向对象的退出app,而且也可以更容易的操作我们活动中的 方法
先上代码:
定义ActivityUtils
public class ActivityUtils {
// 声明一个集合用于记录所有打开的活动
private static ArrayList<Activity> list = new ArrayList<Activity>();

// 加入活动对象------>onCreate
public static void add(Activity activity){
list.add(activity);
}

// 移除一个具体的活动--->onDestroy
public static void remove(Activity activity){
list.remove(activity);
}

// 关闭所有存在的活动---->close
public static void removeAll(){
for(Activity activity : list){
if(! activity.isFinishing()){
activity.finish();
}
}
}
}

定义 baseActivity 把 共同的方法都提出来
public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 这个父类不需要设置内容, 因为他的目标不是要显示, 而是要为子类提供公共性操作
ActivityUtils.add(this);
}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
ActivityUtils.remove(this);
}
public void show(String message){
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值