Service

原创 2017年07月23日 00:59:10
1.服务是运行在后台的,可以用来做一些耗时的操作,后台并不是子线程,服务运行在主线程.
public class MainActivity extends AppCompatActivity {

    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.e("TAG", "onServiceConnected: ------------");
            MyService.MyBinder binder = (MyService.MyBinder) service;
            binder.show("你是一个大傻逼..");
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.e("TAG", "onServiceDisconnected: ----------");

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button start = (Button) findViewById(R.id.start_service);
        Button stop = (Button) findViewById(R.id.stop_service);
        Button bind = (Button) findViewById(R.id.bind_service);
        Button unbind = (Button) findViewById(R.id.unbind_service);
	//启动服务
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,MyService.class);
                startService(intent);
            }
        });
	//停止服务
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,MyService.class);
                stopService(intent);
            }
        });
	//绑定服务
        bind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,MyService.class);
                bindService(intent,mConnection,BIND_AUTO_CREATE);
            }
        });
	//取消服务的绑定
        unbind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unbindService(mConnection);
            }
        });
    }
}




public class MyService extends Service {
    private static final int NOTIFY_ID = 123;
    private static int f = 0;
    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: -------------:oncreat");
        super.onCreate();
        f=0;

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle(getText(R.string.title))
                        .setContentText(getText(R.string.text));
        // 创建通知被点击时触发的Intent
        Intent resultIntent = new Intent(this, MainActivity.class);

        // 创建任务栈Builder
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
        stackBuilder.addParentStack(MainActivity.class);
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(
                        0, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 构建通知
        final Notification notification = mBuilder.build() ;
        // 显示通知
        mNotifyMgr.notify(NOTIFY_ID, notification);
        // 启动为前台服务
        startForeground(NOTIFY_ID, notification);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (f==0){
                    //startForeground(NOTIFY_ID, notification);
                    Log.e(TAG, "run: --------------");
                }
            }
        }).start();

        Notification no =new Notification();
        

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand: ---------------:onstartcommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: --------------:ondestroy");
        f=1;
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG, "onBind: ------------------:onbind");
        return new MyBinder();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.e(TAG, "onUnbind: ------------------:onunbind");
        return super.onUnbind(intent);
    }

    class MyBinder extends Binder{
        public void show(String name){
            Log.e(TAG, "show: --------------:name :"+name);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.e(TAG, "run: ----------------创建子线程执行耗时任务.");
                }
            });
        }
    }
	//自身提供的停止服务的方法
     @Override
     public boolean stopService(Intent name) {
    	return super.stopService(name);
    }
}

注意细节:
1.服务运行在主线程
2.启动startService(intent);
3.停止服务 stopServiece() 和 stopSelf()();
4.服务中oncreat方法中添加子线程来做耗时操作;
5. 4中的子线程不会通过stopservice 或者stopself 而停止,只有在ondestoy方法中关闭子线程.或者程序关闭.
6.startservice并且bindservice了,那么就要stopservice 和 unbindservice才能停止服务.
7.unbindservice只能解绑未解绑的服务,如果解绑已经解绑的服务,则程序会报异常.
8.通过notification,来将服务变成前台service,这样就不会因为内存不足而被系统杀死.
9.服务可以通过远程服务来实现进程间通信,如AIDL.


spring service 层调用service 层是否合理

对于模块划分,我的观点始终是看项目的规模,团队的规模。  如果1、2个人开发的,模块很容易划分,基本上都是纵向划分(一个模块的前端、action、service、orm都是一个人开发),这样划分,随...
  • wang1988081309
  • wang1988081309
  • 2017年05月13日 23:25
  • 546

spring中service调用service的事务控制

使用SPRING控制事务,SERVICE之间相互调用,如何进行事务控制
  • fkbush
  • fkbush
  • 2015年09月25日 09:46
  • 10444

JAVA中service实现类中的@Service(demoService)是什么意思? 求哪位大神指点

JAVA中service实现类中的@Service(demoService)是什么意思? 求哪位大神指点  分享| 2012-12-28 16:47328510453 | 浏览 21077 次 ...
  • evilcry2012
  • evilcry2012
  • 2016年08月10日 11:20
  • 2897

Service的理解和使用

Android的Service学习,大致分为两类:started服务(包含IntentService),bound服务。...
  • llayjun
  • llayjun
  • 2016年05月17日 17:33
  • 6807

Android中的Service与进程间通信(IPC)详解

Service 什么是Service 在后台长期运行的没有界面的组件。其他组件可以启动Service让他在后台运行,或者绑定Service与它进行交互,甚至实现进程间通信(IPC)。例如,可以让服...
  • linchaolong
  • linchaolong
  • 2016年04月27日 20:38
  • 6302

linux下service的命令用法

一、用法概述: # service service Usage: service [-h|-?]        service list        service check SER...
  • wxlinwzl
  • wxlinwzl
  • 2015年03月20日 11:11
  • 12067

Android Service最全面的解析

刘明渊 的博客地址:http://blog.csdn.net/vanpersie_9987 Service Service是Android中一个类,它是Android四大组件之一,使用S...
  • scott2017
  • scott2017
  • 2016年05月26日 11:41
  • 29047

android中Service使用详解

service用于长期在后台处理任务,而不需要对用户可见。 service有2种基本的启动方式: startService():使用这种方式,来进行单一的任务,不需要返回结果给调用者 bindServ...
  • baidu_26994091
  • baidu_26994091
  • 2016年06月29日 01:51
  • 12309

httpd: unrecognized service 的解决方案

最近小益在搭建Apache服务器的时候突然出现了 “httpd: unrecognized service”的错误,无法解析httpd服务,记录下解决方案。 问题描述 在使用命令“serv...
  • u010394032
  • u010394032
  • 2015年08月24日 13:18
  • 4752

service: no such service mysqld 与MySQL的开启,关闭和重启

1.问题原因与解决办法因为修改了MySQL临时文件的目录后,使用service mysqld restart重启MySQL出现如下错误:service: no such service mysqld错...
  • K346K346
  • K346K346
  • 2016年07月05日 16:14
  • 5334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Service
举报原因:
原因补充:

(最多只允许输入30个字)