系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收 器(BroadcastReceiver)
作者:webabcd
介绍 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Broadcast) - 用于发送广播 广播接收器(BroadcastReceiver) - 用于接收广播 Intent - 用于连接以上各个组件,并在其间传递消息 1、演示 Activity 的基本用法,⼀个 Activity 启动另⼀个 Activity,启动另⼀个 Activity 时为其传递 参数,被启动的 Activity 返回参数给启动者的 Activity Main.java 代码 package com.webabcd.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { TextView txt; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); txt = (TextView) this.findViewById(R.id.txt); txt.setText("Activity 1"); Button btn = (Button) this.findViewById(R.id.btn); btn.setText("启动另⼀个Activity"); btn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // 实例化 Intent,指定需要启动的 Activity Intent intent = new Intent(); intent.setClass(Main.this, MyActivity.class); // 实例化 Bundle,设置需要传递的参数 Bundle bundle = new Bundle(); bundle.putString("name", "webabcd"); bundle.putDouble("salary", 100.13); // 将需要传递的参数赋值给 Intent 对象 intent.putExtras(bundle); // startActivity(intent); // 启动指定的 Intent(不等待返回结果) // Main.this.finish(); // 启动指定的 Intent,并等待返回结果 // 其中第二个参数如果大于等于零,则返回结果时会回调 onActivityResult() 方法 startActivityForResult(intent, 0); } }); Log.d("MyDebug", "onCreate"); } // 被启动的 Activity 返回结果时的回调函数 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK){ Bundle bundle = data.getExtras(); String name = bundle.getString("name"); double salary = bundle.getDouble("salary"); txt.setText("Activity 1" + "\n名字:" + name + "\n薪水:" + String.valueOf(salary)); } } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.d("MyDebug", "onStart"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.d("MyDebug", "onStop"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); Log.d("MyDebug", "onRestart"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.d("MyDebug", "onPause"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.d("MyDebug", "onResume"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("MyDebug", "onDestroy"); } } MyActivity.java 代码 package com.webabcd.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; // 被另⼀个 Activity 所启动的 Activity public class MyActivity extends Activity { Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main2); // 获取启动者传递过来的参数 intent = this.getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString("name"); double salary = bundle.getDouble("salary"); TextView txt = (TextView) this.findViewById(R.id.txt); txt.setText("Activity 2" + "\n名字:" + name + "\n薪水:" + String.valueOf(salary)); Button btn = (Button) this.findViewById(R.id.btn); btn.setText("返回前⼀个Activity"); btn.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // 返回参数给启动者 MyActivity.this.setResult(Activity.RESULT_OK, intent); MyActivity.this.finish(); } }); } } AndroidManifest.xml 代码
package="com.webabcd.activity" android:versionCode="1"
android:versionName="1.0">
2、Service, Broadcast, BroadcastReceiver 的演示 Main.java 代码 package com.webabcd.service; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; /* * startService() 和 bindService() 的区别 * startService() - 正常理解就好 * bindService() - 使当前上下文对象(本例中就是 Activity)通过⼀个 ServiceConnection 对象邦定 到指定的 Service 。这样,如果上下文对象销毁了的话,那么其对应的 Service 也会被销毁 */ public class Main extends Activity implements OnClickListener { private TextView txtMsg; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTitle("android 之 service"); this.findViewById(R.id.btnStart).setOnClickListener(this); this.findViewById(R.id.btnStop).setOnClickListener(this); this.findViewById(R.id.btnBind).setOnClickListener(this); this.findViewById(R.id.btnUnbind).setOnClickListener(this); txtMsg = (TextView)this.findViewById(R.id.txtMsg); // 实例化自定义的 BroadcastReceiver receiver = new UpdateReceiver(); IntentFilter filter = new IntentFilter(); // 为 BroadcastReceiver 指定 action ,使之用于接收同 action 的广播 filter.addAction("com.webabcd.service.msg"); // 以编程方式注册 BroadcastReceiver 。配置方式注册 BroadcastReceiver 的例 子见 AndroidManifest.xml 文件 // ⼀般在 OnStart 时注册,在 OnStop 时取消注册 this.registerReceiver(receiver, filter); // this.unregisterReceiver(receiver); } @Override public void onClick(View v) { Intent intent = new Intent(Main.this, MyService.class); switch (v.getId()) { case R.id.btnStart: this.startService(intent); break; case R.id.btnStop: this.stopService(intent); break; case R.id.btnBind: this.bindService(intent, conn, Context.BIND_AUTO_CREATE); break; case R.id.btnUnbind: this.unbindService(conn); break; } } // bindService() 所需的 ServiceConnection 对象 private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { } @Override public void onServiceDisconnected(ComponentName className) { } }; private String msg=""; private UpdateReceiver receiver; // 实现⼀个 BroadcastReceiver,用于接收指定的 Broadcast public class UpdateReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { msg = intent.getStringExtra("msg"); txtMsg.append(msg + "\n"); } } } MyService.java 代码 package com.webabcd.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; // 演示 Service 的生命周期。具体信息运行程序后在 LogCat 中查看 public class MyService extends Service { @Override public IBinder onBind(Intent intent) { Log.d("MyDebug", "onBind"); sendMsg("onBind"); // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.d("MyDebug", "onCreate"); sendMsg("onCreate"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("MyDebug", "onDestroy"); sendMsg("onDestroy"); } @Override public void onRebind(Intent intent) { // TODO Auto-generated method stub super.onRebind(intent); Log.d("MyDebug", "onRebind"); sendMsg("onRebind"); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d("MyDebug", "onStart"); sendMsg("onStart"); } @Override public boolean onUnbind(Intent intent) { Log.d("MyDebug", "onUnbind"); sendMsg("onUnbind"); // TODO Auto-generated method stub return super.onUnbind(intent); } // 发送广播信息 private void sendMsg(String msg){ // 指定广播目标的 action (注:指定了此 action 的 receiver 会接收此广播) Intent intent = new Intent("com.webabcd.service.msg"); // 需要传递的参数 intent.putExtra("msg", msg); // 发送广播 this.sendBroadcast(intent); } } MyBootReceiver.java 代码 package com.webabcd.service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class MyBootReceiver extends BroadcastReceiver { // 用于接收满足条件的 Broadcast(相应的 Broadcast 的注册信息详见 AndroidManifest.xml , 当系统启动完毕后会调用这个广播接收器) @Override public void onReceive(Context arg0, Intent arg1) { Log.d("MyDebug", "onReceive"); // 启动服务 Intent service = new Intent(arg0, MyService.class); arg0.startService(service); } } AndroidManifest.xml 代码
package="com.webabcd.service" android:versionCode="1"
android:versionName="1.0">
OK
阅读(910) | 评论(0) | 转发(0) |