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.


相关文章推荐

java-gearman-service-0.6.6.jar

  • 2017年11月17日 11:07
  • 159KB
  • 下载

Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)

CXF与Spring整合,分两个方面给大家介绍: 1,在传统ssh项目基础上添加Web Service赋值CXF的jar包在web.xml配置文件中导入CXF的核心控制器:CXFServlet在Spr...

VS2010 Service Pack 1 补丁包

  • 2017年10月31日 16:36
  • 754KB
  • 下载

分布式系统系列(三)---Web Service实战--CXF理论篇

第一篇:CXF理论篇            在Java领域,WebService的框架很多,例如:AXIS,XFire,CXF等。AXIS,XFire相对比较成熟。           Axis全程A...

Android Service客户端测试例子

  • 2017年11月06日 14:12
  • 22.47MB
  • 下载

Android Service测试例子

  • 2017年11月06日 14:11
  • 24.21MB
  • 下载

Spring MVC 解读——@Autowired、@Controller、@Service从原理层面来分析

Spring MVC 解读——@Autowired 一、@Autowired     作为一个Spring开发者对@Autowired注解必定是非常了解了, 顾名思义自动装配,应该是Spring会自动...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Service
举报原因:
原因补充:

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