介绍
在 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 <? 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 > 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 <? 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 >

更多相关文章

  1. 利用busybox制作android下的ramdisk启动盘
  2. Android(安卓)adb 使用详解(一)
  3. Android中Widget实例
  4. Android(安卓)在App中启动另一个App
  5. Android7.1启动系统App必须配置加密
  6. Android(安卓)3.2 以上转屏,切换屏幕,横竖屏(onConfigurationChange
  7. 修改Android默认启动项launcher
  8. android 数据储存——ContentProvider(4)
  9. Activity全面解析

随机推荐

  1. android studio启动一直卡在fetching And
  2. 解决Android启动显示空白界面的问题,自定
  3. Viewpager2—登录注册引导页面
  4. Android(安卓)自定义 RadioButton 去除无
  5. 关于 Android合并分区的问题
  6. Android(安卓)Studio安装配置详细步骤(超
  7. Android(安卓)定位GPS的使用
  8. 2020年GitHub标星2.9K的Android基础——
  9. Android(安卓)style & Theme 再探析(一)
  10. Hi,腾讯WeTest限免开放Android(安卓)Oreo