Android 四大组件之一:service:

Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy

主要有绑定和非绑定两种方式

首相在Activity中设置四个Button,用于测试绑定和非绑定两种方式,按下Button播放音乐,停止音乐,非绑定用StopService停止,绑定方式用Bind Service启动,解绑用unbindService停止。
非绑定:Intent intent=new Intent(MainActivity.this,MyService.class);
start Service(intent);/stopSercice(intent)
从Activity启动service主要用上述代码,
 
绑定:Intentintent=newIntent(MainActivity.this,MyService.class);
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
serviceConnection为:
private ServiceConnection serviceConnection=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name,
                                   IBinder service) {
     myService=((MyService.MyBinder)service).getService();
    }     @Override
    public void onServiceDisconnected(ComponentName name) {     }
};
绑定写法为固定写法
在Service中还可以使用函数回调的方式来进行某些操作
函数回调一般有四个步骤:
1. 定义一个借口,借口里定义一个方法
2. Activity中实现这个借口,和借口里的方法
3.Service中定义public static void setMusicStop(Context context){
    stopImg = (StopImg) context;
}
4.在Activity中传入作用域就能够调用Service中的方法。
函数回调一般分为这四个步骤。
函数回调不仅用于Activity与Service中,还可以用于Activity与Activity中。
音乐播放器中一般用到函数回调。
 
 
Broadcast:广播
注册方法非为静态、动态两种方式
静态即在清单文件中手动注册
<receiver
    android:name=".Broadcast.MySMS"
    android:enabled="true"
    android:exported="true"
>
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
其中的android:name="android.provider.Telephony.SMS_RECEIVED"
为自己定义的名称
 
动态注册:
//动态注册广播
IntentFilter intent Filter=new IntentFilter();
intentFilter.addAction("android.jredu.action.WEN");
registerReceiver(new MyactiveBroad(),intentFilter);
 
 
 
public class MyactiveBroad extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        String arg2 = intent.getStringExtra("arg2");
        Log.d("===========接受======",arg2);
    }
}
广播注册完成后,还要下一个继承BroadcastReceiver的方法,用于接收广播的内容,想要在哪接收广播,就要在哪注册广播。
 
下面写一个广播的测试程序来说明:用到之前说的Service
 
首先,建立一个Activity1,设置两个Button,
一个测试静态注册,一个用于跳转测试动态注册。
再建立一个Service,静态注册,
 
 
在Service清单文件中,加入
<receiver
    android:name=".Broadcast.MyReceiver"
    android:enabled="true"
    android:exported="true"
>
    <intent-filter>
        <action android:name="android.jredu.broadcast.ZHANG" />
    </intent-filter>
</receiver>
这就静态注册了一个广播,广播的name为
<action android:name="android.jredu.broadcast.ZHANG" />
再建立一个Activity2,测试动态发送。
 
 
下为Activity1的内容
public class BroadcastActivity extends AppCompatActivity {
    private Button bt1,bt2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast);
        bt1= (Button) findViewById(R.id.bt1);
        bt2= (Button) findViewById(R.id.bt2);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("arg","你好");
                intent.setAction("android.jredu.broadcast.ZHANG");
                sendBroadcast(intent);
            }
        });
        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(getBaseContext(),BroadActivity.class);
                startActivity(intent);
            }
        });
        //动态注册广播
       
IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction("android.jredu.action.WEN");
        registerReceiver(new MyactiveBroad(),intentFilter);     }
    public class MyactiveBroad extends BroadcastReceiver{         @Override
        public void onReceive(Context context, Intent intent) {
            String arg2 = intent.getStringExtra("arg2");
            Log.d("===========接受======",arg2);
        }
    }
}
 
下为Activity2的内容:中有一个Button,按下发送广播
public class BroadActivity extends AppCompatActivity {
    private Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broad);
        bt1= (Button) findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("arg2","42870");
                intent.setAction("android.jredu.action.WEN");
                sendBroadcast(intent);
            }
        });
    }
}

Android 四大组件之service与Broadcast的更多相关文章

  1. Android四大组件之Service

    Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...

  2. 【Android开发日记】之入门篇(五)——Android四大组件之Service

    这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...

  3. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

  4. Android四大组件之一Service介绍-android学习之旅(十二)

    基本概念: service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面.其他组件如acticity可以通过startService启动该组件,也可以通过bindService ...

  5. Android四大组件之一 -- Service详解

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  6. Android四大组件:Service

    前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...

  7. Android四大组件之Service浅见

    Service 是Android四大组件之一,可以在不显示界面的情况下在后台运行.还有一个作用是通过AIDL来实现进程间通信. Service的启动方式 Service的启动方式有两种,startSe ...

  8. Android 四大组件之Service

    ---恢复内容开始--- 1,Service的生命周期

  9. 谈Android四大组件之Service篇

    Service简介 Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序.Service必须在AndroidManifest.xml中声明 ...

随机推荐

  1. Python on Android

    Python on Android Posted on April 29, 2015 by Alexander Taylor   There are an increasing number of r ...

  2. appFramework在三星某些机型上的兼容问题

    有个问题困扰了安卓哥好几天 一个带有fixed抬头的列表页,在向上swipe的时候,有一定概率会把整个画面滚动上去,就连fixed的部分也移动了. 于是哥觉得是webview的问题,找了各种选项,禁用 ...

  3. Struts2 全局拦截器、result 的实现

    定义一个可以继承的包,在这个包里面写入自己常用的拦截器,于是就实现了全局拦截器的实现. 现在,我们定义一个专门用来继承的包: <!--专门提供前台继承的包--> <package n ...

  4. Reverse Linked List 递归非递归实现

    单链表反转--递归非递归实现 Java接口: ListNode reverseList(ListNode head) 非递归的实现 有2种,参考 头结点插入法 就地反转 递归的实现 1) Divide ...

  5. android 通过eclipse混淆代码 打包 + proguard 总结

    android应用程序的混淆打包 1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示: target=android- ...

  6. 【HDOJ】3397 Sequence operation

    线段树的应用,很不错的一道题目.结点属性包括:(1)n1:1的个数:(2)c1:连续1的最大个数:(3)c0:连续0的最大个数:(4)lc1/lc0:从区间左边开始,连续1/0的最大个数:(5)rc1 ...

  7. Fixing common issues when hosting a .NET 4.0 WCF service in IIS 7

    http://sandrinodimattia.net/fixing-common-issues-when-hosting-a-net-4-0-wcf-service-in-iis-7/ Until ...

  8. R语言 系统聚类分析1

    #聚类分析是一类将数据所研究对象进行分类的统计方法,这一类方法的共同特点是:#事先不知道类别的个数与结构 据以进行分类的数据是对象之间的相似性 或差异性数据#将这些相似(相异)性数据看成是对象之间的距 ...

  9. poj3167

    这道题是一道kmp的扩展版的好题一串匹配一串很容易想到kmp,但是这里的匹配要求的是两个串的名次相同显然名次是会变的,为了方便,我们可以换一种表达对于两个等长的串的相同位置,名次相等就是在它之前比它小 ...

  10. MapReduce扩展:应用程序如何运行于Hadoop Yarn之上

    1. 背景   “应用程序运行于Hadoop Yarn之上”的需求来源于微博运维数据平台中的调度系统,即调度系统中的任务需要运行于Hadoop Yarn之上.这里的应用程序可以简单理解为一个普通的进程 ...