系出名门Android(4) - 活动(Activity), 服务(Service), 广播(...


系出名门Android(4) - 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收

器(BroadcastReceiver) java

做者:webabcd android

介绍 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能   服务(Service) - 至关于后台运行的 Activity  广播(Broadcast) - 用于发送广播   广播接收器(BroadcastReceiver) - 用于接收广播  Intent - 用于链接以上各个组件,并在其间传递消息   一、演示 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 代码 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.webabcd.activity" android:versionCode="1"     android:versionName="1.0">     <application android:icon="@drawable/icon" android:label="@string/app_name">         <activity android:name=".Main" android:label="@string/app_name">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>         <!--            若是有须要用到的 Activity ,则都要在这里作相应的配置         -->         <activity android:name=".MyActivity" android:label="Activity 2" />     </application>     <uses-sdk android:minSdkVersion="3" /> </manifest>  二、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 代码 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.webabcd.service" android:versionCode="1"     android:versionName="1.0">     <application android:icon="@drawable/icon" android:label="@string/app_name">         <activity android:name=".Main" android:label="@string/app_name">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>                  <!--            若是有须要用到的 service ,则都要在这里作相应的配置         -->         <service android:name=".MyService"></service>                  <!--            注册⼀个 BroadcastReceiver             其 intent-filter 为 android.intent.action.BOOT_COMPLETED(用于接收系统启动完 毕的 Broadcast)         -->         <receiver android:name=".MyBootReceiver">             <intent-filter>                 <action android:name="android.intent.action.BOOT_COMPLETED" />             </intent-filter>         </receiver>     </application>          <!--        接受系统启动完毕的 Broadcast 的权限     -->     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />     <uses-sdk android:minSdkVersion="3" /> </manifest>  OK [源码下载]
相关文章
相关标签/搜索