温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

service初级:Activity与service间的联系、重写ServiceConnection

发布时间:2020-10-25 18:26:21 来源:网络 阅读:521 作者:glblong 栏目:开发技术

MainActivity:

public class MainActivity extends Activity
{
    Mybinder mybinder =null;
    ServiceConnection mConn = new ServiceConnection()
    {
        @Override
        public void onServiceDisconnected(ComponentName name)
        {
                        
        }
                    
        @Override
        public void onServiceConnected(ComponentName name, IBinder binder)
        {
            mybinder = (Mybinder) binder;//对象binder,强转为Mybinder类型
            Log.e("MainActivity", "mybinder.getname()");
        }
    };
                
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                    
        final TextView textView1 = (TextView) findViewById(R.id.textView1);
        final TextView textView2 = (TextView) findViewById(R.id.textView2);
                    
                    
        findViewById(R.id.button1).setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(MainActivity.this,MyService.class);
                            
                bindService(intent, mConn, BIND_AUTO_CREATE);
            }
        });
                    
        findViewById(R.id.button2).setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                unbindService(mConn);
            }
        });
                    
        findViewById(R.id.button3).setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                textView1.setText(mybinder.play());//通过mybinder调用service的方法,或者通过方法将数据传给service
            }
        });
                    
        findViewById(R.id.button4).setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                textView2.setText(mybinder.pause());
            }
        });
    }
                
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
                
}


MyService:

public class MyService extends Service
{
    public String play()
    {
        return "播放";
    }
    public String pause()
    {
        return "暂停";
    }
      
    class Mybinder extends Binder//Binder类继承了接口IBinder,Mybinder继承Binder类
    {
        //在Mybinder创建方法
        public String getname()
        {
            return "myBinder";
        }
          
        //调用外部方法
        public String play()
        {
            return MyService.this.play();
        }
        public String pause()
        {
            return MyService.this.pause();
        }
    }
      
    private IBinder binder = new Mybinder();//IBinder声明创建一个Mybinder对象
      
    @Override
    public IBinder onBind(Intent intent)
    {
        Log.e("MyService", "onBind");
        return binder;//返回IBinder对象
    }
      
    @Override
    public void onCreate()
    {
        Log.e("MyService", "onBind");
        super.onCreate();
    }
      
    @Override
    public boolean onUnbind(Intent intent)
    {
        Log.e("MyService", "onUnbind");
        return super.onUnbind(intent);
    }
      
    @Override
    public void onDestroy()
    {
        Log.e("MyService", "onDestroy");
        super.onDestroy();
    }
      
}



  1. service属性

android:enabled

这个属性用于指示该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化。默认值是true。

<application>元素有它自己的enabled属性,它的这个属性适用于应用中所有的组件,包括service组件。对于被启用的服务,<application>和<service>元素的enabled属性都必须是true(默认值都是true)。如果有一个元素的enabled属性被设置为false,该服务就会被禁用,而不能被实例化。

android:exported

这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。

这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。









向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI