一.Activity
生命周期
onCreate():活动第一次创建时
onStart():活动从不可见变为可见时
onResume():活动准备好和用户交互时
onPause():暂停(准备去启动另一个页面时调用)
onStop():活动不可见
onDestroy():活动被销毁
onRestart():活动由停止变为运行
生命周期实例
启动模式
singleInstance:申明为此模式时,当前Activity会单独使用一个栈管理,目的是可以使其他程序和此程序共享這个活动的实例
singleTask:启动新的活动时,检查栈中是否有该活动的实例,发现就直接使用,并把這个活动实例之上的所有实例全部出栈,没发现才创建一个新势力
singleTop:只检查栈顶是否有该活动实例
singleInstance(默认):启动新的活动时,直接创建新的实例加入栈顶,返回时会重复关掉所有创建的实例
4种状态
1.onActivityResult()用于获取新页面返回的数据,代码片段如下(其中resultCode代表新页面中传入的代号值)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode) {
case -1:
title.clear();
subject.clear();
title = ((ArrayList) data.getSerializableExtra("title"));
switch (title.get(i)) {
case "自选":
subject.add(new MyOptionMarket());
break;
case "上海黄金交易所":
subject.add(new CGMarket());
break;
}
break;
case 2: //在more中点击选项进入对应页面
int position = data.getIntExtra("position", 0);
break;
}
}
2.在AndroidMainfest.xml中activity标签中添加android:configChanges="orientation|keyboardHidden|screenSize"时,
二.BroadcastReceiver
可以把BroadcastReceiver比喻成一个全局的超级大喇叭,用于接受来自系统或程序发送的广播,发送时,是利用Intent传递,且分为普通广播(异步操作,接收没有先后顺序)和有序广播(接受有先后顺序,前一个接受者可以中断或添加广播消息)
BroadcastReceiver的生命周期只有10秒左右,所以不建议在onReceive()内执行耗时操作
发送广播:
发送普通广播:
Intent it = new Intent();
it.setAction("text"); //广播地址
it1.putExtra("msg", "简单消息");
sendBroadcast(it); // 普通发送
发送有序广播:
Intent it = new Intent();
it.setAction("text"); <span style="font-family: Arial, Helvetica, sans-serif;"> //广播地址</span>
it.putExtra("msg", "简单消息");
sendOrdereBroadcast(it,null); //有序发送
接收广播:
动态注册:
IntentFilter filter=new IntentFilter("text"); //指定要收听的广播地址
registerReceiver(<span style="font-size: 18px;">BroadcastReceiver,filter</span>); //参数1为<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">BroadcastReceiver的实现类</span>
静态注册:
<span style="font-size:18px;"> <receiver android:name=".Text"> //Text是类名
<intent-filter>
<action android:name="<span style="font-family:Arial, Helvetica, sans-serif;">text</span>"></action>
</intent-filter>
</receiver></span>
实例:发送并接收一个有序广播(通过静态注册方式接收)
发送普通广播:
it = new Intent();
it.setAction("11");
it.putExtra("msg", "简单消息");
sendOrderedBroadcast(it,null);
第一个接收类:
public class Text extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "text收到:" + intent.getStringExtra("msg"), Toast.LENGTH_LONG).show();
/**
* 通过bundle存入添加广播消息
* */
Bundle bundle=new Bundle();
bundle.putString("text","text存入的消息");
setResultExtras(bundle);
// abortBroadcast(); 加上此句代码,则下一个不会收到广播
}
}
第二个接收类:
public class Text1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle=getResultExtras(true);
String s=bundle.getString("text"); //接收上一个广播接收者存入的消息
Toast.makeText(context,"text1收到:" +intent.getStringExtra("msg")+s,Toast.LENGTH_LONG).show();
}
}
两个类的静态注册:
<receiver android:name=".Text">
<intent-filter>
<action android:name="11"></action> <!--表示收听11这个广播-->
</intent-filter>
</receiver>
<receiver android:name=".Text1">
<intent-filter>
<action android:name="11"></action>
</intent-filter>
</receiver>
需要注意的是部分系统广播只能通过代码注册,使用静态方式时会没有效果,比如屏幕解锁的广播..
另外还有一种广播LocalBroadcastManager,主要用于程序内部使用,安全,效率,不会被其他程序窃听,用法差别不大
发送广播:
<span style="font-size:18px;"> Intent intent = new Intent("22");
intent.putExtra("msg", "haha");
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(MainActivity.this);
lbm.sendBroadcast(intent);</span>
接收广播:
<span style="font-size:24px;"> </span><span style="font-size:18px;"> IntentFilter filter = new IntentFilter("22");
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(MainActivity.this);
lbm.registerReceiver(new my(),filter);</span>
收到广播时Toast一下
<span style="font-size:18px;"> class my extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("msg");
Toast.makeText(context, "text收到:" + intent.getStringExtra("msg"), Toast.LENGTH_LONG).show();
}
}</span><span style="font-size:24px;">
</span>
三.Service
service没有界面的Activity,用于执行后台任务,属于UI线程,故不能再他里面执行耗时操作(创建线程操作)
启动方式一:
Intent it=new Intent(context,MyService.class);
startService(it);//启动服务
stopService(it); //停止服务
方式一的生命周期:
onCreate:创建时执行一次
onStartCommand:每次开启都执行
onDestroy:销毁时执行一次
启动方式二:
四.Activity