安卓如何在Service、BroadCast、Application中回调Activity| 观察者设计模式使用

1.  回调

1.1 定义接口

public interface NetEvevt {
    public void onNetChange(int netMobile);
}

1.2. 实现回调接口

public class MainActivity extends AppCompatActivity implements NetEvevt{
    // 定义静态变量
    public static NetEvevt evevt;
    CustomerReceiver customerReceiver=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 赋值给变量
        evevt=this;
        if(customerReceiver==null){
            customerReceiver=new CustomerReceiver();
            IntentFilter filter = new IntentFilter("com.denganzhi.greendao.CustomerReceiver.action");
            registerReceiver(customerReceiver, filter);
        }
    }
    // 实现接口,重写方法
    @Override
    public void onNetChange(int netMobile) {
        Toast.makeText(MainActivity.this,"netMobile:"+netMobile,Toast.LENGTH_SHORT).show();
    }

    public void methodClick(View view){
        Intent intent = new Intent("com.denganzhi.greendao.CustomerReceiver.action");
        sendBroadcast(intent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        if(customerReceiver!=null){
            unregisterReceiver(customerReceiver);
            customerReceiver=null;
        }
    }
}

1.3. 广播发送

public class CustomerReceiver extends BroadcastReceiver {

    public NetEvevt evevt = MainActivity.evevt;


    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
   //     Toast.makeText(context,"收到",Toast.LENGTH_LONG).show();
        // 获取实现方法的类,调用方法
        if(evevt!=null){
            evevt.onNetChange(110);
        }

    }

    // 自定义接口
//    public interface NetEvevt {
//        public void onNetChange(int netMobile);
//    }

}

 观察者模式:
1.   创建 观察者 observer   被观察者observal
2.   观察者加入  被观察者中  
3.   被观察者触发,多个观察者更新 

案例 :列表页有下载、详情页有下载 

 2.手动实现观察者模式

1.  定义接口:DownLoad

package com.guanchazhe;

public interface DownLoad {
	
	public void update(int degree);

}

2.   观察者实现接口  

观察者1: 

package com.guanchazhe;

/*
 *  观察者: 下载管理
 */
public class DownLoadManager implements DownLoad{
	@Override
	public void update(int degree) {
	  System.out.println("DownLoadManager 下载了:"+degree);
	}
}

观察者2: 

package com.guanchazhe;
 /*
  *  观察者: 下载详情页
  */
public class DownLoadDetail implements DownLoad{

	@Override
	public void update(int degree) {
	  System.out.println("现在详情页下载了:"+degree);   
	}
}


3.   观察者注册到被观察者中  
     调被观察者方法通知观察者

package com.guanchazhe;

import java.util.ArrayList;
import java.util.List;


  /*
   * 被观察者
   */
public class Myobserval {
	
	List<DownLoad> list= new ArrayList<>();
    
	// 注册观察者,在被观察者中
	public void addOberser(DownLoad d){
		list.add(d);
	}
	public void  downloadApp(){
		 
		// 被观察者中下载
		System.out.println("请求网络开始下载了:"+10);
		
		// 通知  观察者
		
		for (DownLoad d : list) {
			d.update(10);
		}
	}
}

4.   调用

package com.guanchazhe;

public class Main {
	 public static void main(String[] args) {
		 Myobserval myobserval=new Myobserval();
		 myobserval.addOberser(new DownLoadDetail());
		 myobserval.addOberser(new DownLoadManager());
		 
		 myobserval.downloadApp();
	}
}

 3.  通过 java.util.Observable  实现观察者模式 

package com.tz.observe;

import java.util.Observable;
import java.util.Observer;

//  定义观察者 1 
public class MyObserve implements Observer{

	@Override
	public void update(Observable observable, Object data) {
		System.out.println("我是观察者1");
	}

}
package com.tz.observe;

import java.util.Observable;
import java.util.Observer;

// 定义观察者2
public class MyObserv1 implements Observer{

	@Override
	public void update(Observable observable, Object data) {
	System.out.println("我是观察者2");
	}

}

被观察者 MyByObserve

package com.tz.observe;

import java.util.Observable;

// 被观察者 
public class MyByObserve extends Observable{

	 @Override
	public boolean hasChanged() {
		// TODO Auto-generated method stub
		return true;
	}
	// 调用被观察者  方法,通知观察者,观察者 update方法 调用
	public void say(){
		System.out.println("我是被观察者");
		this.notifyObservers();
	}
}

 MainActivity 调用

public class MainActivity extends Activity {
	MyByObserve myb;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 把观察者加入被观察者的集合中
		 myb=new MyByObserve();
		myb.addObserver(new MyObserve());
		myb.addObserver(new MyObserv1());
	}
	
	public void getObserve(View view){
	 //  myb.notifyObservers();
	 //  被观察者方法
		 myb.say();
	}
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值