android中应用层的服务级别与activity差不多。service都是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
          Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。

一.基础知识

服务一般分为两种:
1:本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。

2:远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。

3、生命周期
context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()

context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() ->onDestroy()

二.本地服务演示

1、startService的demo

(1)服务端

package com.example.localserver;  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
public class DataService extends Service {  
public static final String TAG = "LocalService";  
@Override  
public void onCreate() {  
Log.d(TAG, "onCreate");  
super.onCreate();  
}  
@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
Log.d(TAG, "onStartCommand");  
return super.onStartCommand(intent, flags, startId);  
}  
@Override  
public void onDestroy() {  
Log.d(TAG, "onDestroy");  
super.onDestroy();  
}  
@Override  
public void onStart(Intent intent, int startId) {  
Log.d(TAG, "onStart");  
super.onStart(intent, startId);  
}  
@Override  
public IBinder onBind(Intent intent) {  
Log.d(TAG, "onBind");  
return null;  
}  
}  
package com.example.localserver;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;public class DataService extends Service {public static final String TAG = "LocalService";@Overridepublic void onCreate() {Log.d(TAG, "onCreate");super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(TAG, "onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {Log.d(TAG, "onDestroy");super.onDestroy();}@Overridepublic void onStart(Intent intent, int startId) {Log.d(TAG, "onStart");super.onStart(intent, startId);}@Overridepublic IBinder onBind(Intent intent) {Log.d(TAG, "onBind");return null;}}

(2)客户端

package com.example.localserver;  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
public class MainActivity extends Activity implements OnClickListener {  
public static final String TAG = "MainActivity";  
private Button mbtn1;  
private Button mbtn2;  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  
mbtn1 = (Button) findViewById(R.id.start_service);  
mbtn2 = (Button) findViewById(R.id.stop_service);  
mbtn1.setOnClickListener(this);  
mbtn2.setOnClickListener(this);  
}  
@Override  
public void onClick(View v) {  
Intent mIntent = new Intent(this, DataService.class);  
switch (v.getId()) {  
case R.id.start_service:  
Log.d(TAG, "click Start Service button");  
startService(mIntent);  
break;  
case R.id.stop_service:  
Log.d(TAG, "click Stop Service button");  
stopService(mIntent);  
break;  
default:  
break;  
}  
}  
@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
// Inflate the menu; this adds items to the action bar if it is present.  
getMenuInflater().inflate(R.menu.main, menu);  
return true;  
}  
@Override  
public boolean onOptionsItemSelected(MenuItem item) {  
// Handle action bar item clicks here. The action bar will  
// automatically handle clicks on the Home/Up button, so long  
// as you specify a parent activity in AndroidManifest.xml.  
int id = item.getItemId();  
if (id == R.id.action_settings) {  
return true;  
}  
return super.onOptionsItemSelected(item);  
}  
}  
package com.example.localserver;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {public static final String TAG = "MainActivity";private Button mbtn1;private Button mbtn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbtn1 = (Button) findViewById(R.id.start_service);mbtn2 = (Button) findViewById(R.id.stop_service);mbtn1.setOnClickListener(this);mbtn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent mIntent = new Intent(this, DataService.class);switch (v.getId()) {case R.id.start_service:Log.d(TAG, "click Start Service button");startService(mIntent);break;case R.id.stop_service:Log.d(TAG, "click Stop Service button");stopService(mIntent);break;default:break;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}

【实验结果】
06-10 05:56:54.182: D/MainActivity(2084): click Start Service button
06-10 05:56:54.216: D/LocalService(2084): onCreate
06-10 05:56:54.228: D/LocalService(2084): onStartCommand
06-10 05:56:54.228: D/LocalService(2084): onStart
06-10 05:57:08.123: D/MainActivity(2084): click Start Service button
06-10 05:57:08.186: D/LocalService(2084): onStartCommand
06-10 05:57:08.186: D/LocalService(2084): onStart
06-10 05:57:13.865: D/MainActivity(2084): click Stop Service button
06-10 05:57:13.880: D/LocalService(2084): onDestroy

【分析】

startService的特点是activity与service没有共存亡,当退出activity时,service仍在后台运行,所以,当再次进入activity时,点击开始按钮,就没有再使用onCreate方法了,而是直接调用onStartCommand方法。

2、bindService的demo

bindservice实现的关键之处,在于 onBind(Intent) 这个方法 返回了一个实现了 IBinder 接口的对象,这个对象将用于绑定 Activity 与 Service 通信。

【实现方法】

(1)Service中,创建一个 Binder实体,重载onBind(Intent intent)方法,返回Binder实例给Activity,然后执行onCreate()函数。

(2)Activity中,通过private ServiceConnection sc = new ServiceConnection() 建立一个Service连接,onServiceConnected()获取Service实例,onServiceDisconnected()释放连接;并通过IBinder接口,调用service中的方法。

(3)Activity中,Intent intent = new Intent("******"); 构建一个service的action,然后bindService(intent, sc, BIND_AUTO_CREATE)绑定服务

【demo】

(1)service端

package com.example.localserver;  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
public class DataService extends Service {  
public static final String TAG = "LocalService";  
private DataDownloadBinder mBinder = new DataDownloadBinder();   
@Override  
public void onCreate() {  
Log.d(TAG, "onCreate");  
super.onCreate();  
}  
@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
Log.d(TAG, "onStartCommand");  
return super.onStartCommand(intent, flags, startId);  
}  
@Override  
public void onDestroy() {  
Log.d(TAG, "onDestroy");  
super.onDestroy();  
}  
@Override  
public IBinder onBind(Intent intent) {  
Log.d(TAG, "onBind");  
return mBinder;  
}  
@Override  
public boolean onUnbind(Intent intent) {  
Log.d(TAG, "onUnbind");  
return super.onUnbind(intent);  
}  
}  
package com.example.localserver;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;public class DataService extends Service {public static final String TAG = "LocalService";private DataDownloadBinder mBinder = new DataDownloadBinder(); @Overridepublic void onCreate() {Log.d(TAG, "onCreate");super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(TAG, "onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {Log.d(TAG, "onDestroy");super.onDestroy();}@Overridepublic IBinder onBind(Intent intent) {Log.d(TAG, "onBind");return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {Log.d(TAG, "onUnbind");return super.onUnbind(intent);}
}
package com.example.localserver;  
import android.os.Binder;  
import android.util.Log;  
public class DataDownloadBinder extends Binder{  
public static final String TAG = "Binder";  
public void startDownload() {  
Log.d(TAG, "startDownload() executed");  
}  
public int add(int a, int b) {  
Log.d(TAG, "add() executed");  
return a + b;  
}  
// 执行具体的下载任务  
}  
package com.example.localserver;import android.os.Binder;
import android.util.Log;public class DataDownloadBinder extends Binder{public static final String TAG = "Binder";public void startDownload() {Log.d(TAG, "startDownload() executed");}public int add(int a, int b) {Log.d(TAG, "add() executed");return a + b;}// 执行具体的下载任务
}

(2)clinet端

package com.example.localserver;  
import android.app.Activity;  
import android.content.ComponentName;  
import android.content.Intent;  
import android.content.ServiceConnection;  
import android.os.Bundle;  
import android.os.IBinder;  
import android.util.Log;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
public class MainActivity extends Activity implements OnClickListener {  
public static final String TAG = "MainActivity";  
private Button mbtn1;  
private Button mbtn2;  
private Button mbtn3;  
private Button mbtn4;  
private DataDownloadBinder mbinder;  
private ServiceConnection mServiceConnection = new ServiceConnection() {  
@Override  
public void onServiceDisconnected(ComponentName name) {  
// TODO Auto-generated method stub  
}  
@Override  
public void onServiceConnected(ComponentName name, IBinder service) {  
mbinder = (DataDownloadBinder) service;  
mbinder.startDownload();  
int sum = mbinder.add(3, 5);  
Log.d(TAG, "sum = " + sum);  
}  
};  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  
mbtn1 = (Button) findViewById(R.id.start_service);  
mbtn2 = (Button) findViewById(R.id.stop_service);  
mbtn3 = (Button) findViewById(R.id.bind_service);  
mbtn4 = (Button) findViewById(R.id.unbind_service);  
mbtn1.setOnClickListener(this);  
mbtn2.setOnClickListener(this);  
mbtn3.setOnClickListener(this);  
mbtn4.setOnClickListener(this);  
}  
@Override  
public void onClick(View v) {  
Intent mIntent = new Intent(this, DataService.class);  
switch (v.getId()) {  
case R.id.start_service:  
Log.d(TAG, "click Start Service button");  
startService(mIntent);  
break;  
case R.id.stop_service:  
Log.d(TAG, "click Stop Service button");  
stopService(mIntent);  
break;  
case R.id.bind_service:  
bindService(mIntent, mServiceConnection, BIND_AUTO_CREATE);  
break;  
case R.id.unbind_service:  
unbindService(mServiceConnection);  
break;  
default:  
break;  
}  
}  
@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
// Inflate the menu; this adds items to the action bar if it is present.  
getMenuInflater().inflate(R.menu.main, menu);  
return true;  
}  
@Override  
public boolean onOptionsItemSelected(MenuItem item) {  
// Handle action bar item clicks here. The action bar will  
// automatically handle clicks on the Home/Up button, so long  
// as you specify a parent activity in AndroidManifest.xml.  
int id = item.getItemId();  
if (id == R.id.action_settings) {  
return true;  
}  
return super.onOptionsItemSelected(item);  
}  
}  
package com.example.localserver;import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {public static final String TAG = "MainActivity";private Button mbtn1;private Button mbtn2;private Button mbtn3;private Button mbtn4;private DataDownloadBinder mbinder;private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mbinder = (DataDownloadBinder) service;mbinder.startDownload();int sum = mbinder.add(3, 5);Log.d(TAG, "sum = " + sum);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbtn1 = (Button) findViewById(R.id.start_service);mbtn2 = (Button) findViewById(R.id.stop_service);mbtn3 = (Button) findViewById(R.id.bind_service);mbtn4 = (Button) findViewById(R.id.unbind_service);mbtn1.setOnClickListener(this);mbtn2.setOnClickListener(this);mbtn3.setOnClickListener(this);mbtn4.setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent mIntent = new Intent(this, DataService.class);switch (v.getId()) {case R.id.start_service:Log.d(TAG, "click Start Service button");startService(mIntent);break;case R.id.stop_service:Log.d(TAG, "click Stop Service button");stopService(mIntent);break;case R.id.bind_service:bindService(mIntent, mServiceConnection, BIND_AUTO_CREATE);break;case R.id.unbind_service:unbindService(mServiceConnection);break;default:break;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}

【实验结果】

06-10 06:03:27.322: D/MainActivity(2195): click Start Service button
06-10 06:03:27.376: D/LocalService(2195): onCreate
06-10 06:03:27.388: D/LocalService(2195): onStartCommand
06-10 06:03:27.388: D/LocalService(2195): onStart
06-10 06:03:39.088: D/LocalService(2195): onBind
06-10 06:03:39.132: D/Binder(2195): startDownload() executed
06-10 06:03:39.132: D/Binder(2195): add() executed
06-10 06:03:39.132: D/MainActivity(2195): sum = 8

06-10 06:03:52.363: D/LocalService(2195): onUnbind
06-10 06:04:08.229: D/MainActivity(2195): click Start Service button
06-10 06:04:08.243: D/LocalService(2195): onStartCommand
06-10 06:04:08.243: D/LocalService(2195): onStart
06-10 06:04:19.284: D/MainActivity(2195): click Stop Service button
06-10 06:04:19.307: D/LocalService(2195): onDestroy

三、远程服务演示

需要使用aidl与bindService共同实现远程服务。

(1)client

package com.example.client;  
import com.example.service.ICom;  
import android.app.Activity;  
import android.content.ComponentName;  
import android.content.Context;  
import android.content.Intent;  
import android.content.ServiceConnection;  
import android.os.Bundle;  
import android.os.IBinder;  
import android.os.RemoteException;  
import android.util.Log;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
public class MainActivity extends Activity implements OnClickListener {  
private static final String TAG = "Client";  
private ICom mICom;  
private Button mbtn1;  
private Button mbtn2;  
private TextView mTV;  
private String url;  
private boolean isBind = false;  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  
mbtn1 = (Button) findViewById(R.id.btn_bind);  
mbtn2 = (Button) findViewById(R.id.btn_allinfo);  
mbtn2.setOnClickListener(this);  
mbtn1.setOnClickListener(this);  
mTV = (TextView) findViewById(R.id.textView);  
}  
ServiceConnection mSC = new ServiceConnection() {  
@Override  
public void onServiceDisconnected(ComponentName name) {  
Log.d(TAG, "onServiceDisconnected...");  
}  
@Override  
public void onServiceConnected(ComponentName name, IBinder service) {  
Log.d(TAG, "Client onServiceConnected");  
mICom = ICom.Stub.asInterface(service);  
if (mICom == null) {  
Log.d(TAG, "Failed");  
} else {  
isBind = true;  
mbtn1.setText("断开");  
mTV.setText("已连接");  
try {  
url = mICom.getWebSite();  
} catch (RemoteException e) {  
e.printStackTrace();  
}  
}  
}  
};  
@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
getMenuInflater().inflate(R.menu.main, menu);  
return true;  
}  
@Override  
public boolean onOptionsItemSelected(MenuItem item) {  
int id = item.getItemId();  
if (id == R.id.action_settings) {  
return true;  
}  
return super.onOptionsItemSelected(item);  
}  
@Override  
public void onClick(View v) {  
switch (v.getId()) {  
case R.id.btn_bind:  
if (isBind == false) {  
Intent mIntent = new Intent();  
mIntent.setAction("com.example.remote");  
mIntent.setPackage("com.example.service");  
mbtn2.setEnabled(true);  
bindService(mIntent, mSC, Context.BIND_AUTO_CREATE);  
} else {  
mbtn2.setEnabled(false);  
mbtn1.setText("连接");  
isBind = false;  
mTV.setText("已断开连接!");  
unbindService(mSC);  
}  
break;  
case R.id.btn_allinfo:  
mTV.setText(url);  
break;  
default:  
break;  
}  
}  
}  
package com.example.client;import com.example.service.ICom;import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private static final String TAG = "Client";private ICom mICom;private Button mbtn1;private Button mbtn2;private TextView mTV;private String url;private boolean isBind = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbtn1 = (Button) findViewById(R.id.btn_bind);mbtn2 = (Button) findViewById(R.id.btn_allinfo);mbtn2.setOnClickListener(this);mbtn1.setOnClickListener(this);mTV = (TextView) findViewById(R.id.textView);}ServiceConnection mSC = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {Log.d(TAG, "onServiceDisconnected...");}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {Log.d(TAG, "Client onServiceConnected");mICom = ICom.Stub.asInterface(service);if (mICom == null) {Log.d(TAG, "Failed");} else {isBind = true;mbtn1.setText("断开");mTV.setText("已连接");try {url = mICom.getWebSite();} catch (RemoteException e) {e.printStackTrace();}}}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_bind:if (isBind == false) {Intent mIntent = new Intent();mIntent.setAction("com.example.remote");mIntent.setPackage("com.example.service");mbtn2.setEnabled(true);bindService(mIntent, mSC, Context.BIND_AUTO_CREATE);} else {mbtn2.setEnabled(false);mbtn1.setText("连接");isBind = false;mTV.setText("已断开连接!");unbindService(mSC);}break;case R.id.btn_allinfo:mTV.setText(url);break;default:break;}}
}

(2)server

package com.example.service;  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.os.RemoteException;  
import android.util.Log;  
public class RemoteService extends Service {  
private static final String TAG = "Remote Service";  
private Com mtest = new Com();  
@Override  
public void onCreate() {  
// TODO Auto-generated method stub  
Log.d(TAG, "Oncreate");  
super.onCreate();  
}  
@Override  
public void onDestroy() {  
// TODO Auto-generated method stub  
Log.d(TAG, "OnDestroy");  
super.onDestroy();  
}  
@Override  
public IBinder onBind(Intent intent) {  
Log.d(TAG, "onBind");  
return mtest;  
}  
@Override  
public boolean onUnbind(Intent intent) {  
Log.d(TAG, "onUnbind");  
return super.onUnbind(intent);  
}  
private class Com extends ICom.Stub {  
@Override  
public String getWebSite() throws RemoteException {  
String url = "www.baidu.com";  
return url;  
}  
}  
}  
package com.example.service;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;public class RemoteService extends Service {private static final String TAG = "Remote Service";private Com mtest = new Com();@Overridepublic void onCreate() {// TODO Auto-generated method stubLog.d(TAG, "Oncreate");super.onCreate();}@Overridepublic void onDestroy() {// TODO Auto-generated method stubLog.d(TAG, "OnDestroy");super.onDestroy();}@Overridepublic IBinder onBind(Intent intent) {Log.d(TAG, "onBind");return mtest;}@Overridepublic boolean onUnbind(Intent intent) {Log.d(TAG, "onUnbind");return super.onUnbind(intent);}private class Com extends ICom.Stub {@Overridepublic String getWebSite() throws RemoteException {String url = "www.baidu.com";return url;}}}

(3)aidl文件


package com.example.service;  
interface ICom{  
String getWebSite();  
}  
package com.example.service;interface ICom{String getWebSite();
}

android应用层服务——binderService,StartService,aidl,本地服务和远程服务相关推荐

  1. Android Binder机制:编写自己的本地服务

    原址 前面几篇博客中系统地介绍了本地服务的注册.检索以及使用过程.这篇博客我们将完成一个属于自己的本地服务:AllenService. 由前面的学习知道,要完成一个自己的本地服务,需要有IAllenS ...

  2. dubbo+zk+apollo微服务,联调调用本地服务

    今天遇到个好玩的事情,和前端联调.每次查出的结果不一样,swagger测试的结果也不一样.debug后,有好几次不进入断点 啥情况?我没改吗.可是有时候查询结果又是对的. 后来,才反应过来.部署了测试 ...

  3. 本地计算机上的mysql服务启动停止工作,本地服务开启MySQL57提示本地计算机上MySQL服务启动后停止。。。。...

    1.首先以管理员身份启动cmd,要不然服务禁止访问. 2.然后在cmd中输入 mysqld --remove mysql或者mysqld --remove mysql57来移除服务. 3.然后进入My ...

  4. 如何给Android应用创建本地服务

    Android系统给应用提供了两种类型的服务:启动型本地服务和绑定型本地服务,这两种服务的详细信息请参考"Android Service开发指南" Android Service开 ...

  5. Service(服务)之 Local Service(本地服务)

    一.Service简介 Android中服务是运行在后台的东西,级别与activity相同(同属四大组件).既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服 ...

  6. Pro Android学习笔记(七七):服务(2):Local Service

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Local Service的目的是更容易实 ...

  7. 工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)

    工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信) 作者  朱先忠 [摘要]       在本篇中,首先详细分析本地服务有关概念,探讨本地服务在工作流运行时.工作流实例及工作流宿主间的地位及 ...

  8. 关于SQL Server 2008R2本地服务的数据库引擎里没有实例名问题

    如上图显示,数据库引擎没有子节点(+),也就是说里面没有实例名,没有实例名也就无法登陆. 这时候该怎么办呢,你就去检查下你服务里面的MSSQLSERVER~(注:服务名默认的是MSSQLSERVER, ...

  9. android应用层服务——binderService与StartService

    android中应用层的服务级别与activity差不多.service都是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改 ...

最新文章

  1. Enterprise Library 4 缓存应用程序块的设计
  2. Android Studio 项目打包成apk时 Signature Version 的选择
  3. 用两个栈(C++)实现插入排序
  4. my Lead add Lead test
  5. String path = request.getContextPath()和String basePath = request.getScheme()
  6. C#LeetCode刷题之#819-最常见的单词(Most Common Word)
  7. OpenWRT开源项目论坛遭未授权访问,可被用于供应链攻击
  8. Redis之 介绍和安装
  9. CodeForces - 1612A Distance
  10. VS2010 发布网站总是连同cs文件一起发布了
  11. 数据挖掘论文matlab,数据挖掘论文3000字范文参考
  12. php 数字转换英文,PHP将英文数字转换为阿拉伯数字
  13. [bzoj1127][悬线法]KUP
  14. Java培训学习之Java开源软件的汇总
  15. CodeForces 1A Theatre Square(水题)
  16. java提出word和pdf等文件的信息
  17. Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)
  18. RSD 教程 —— 4 框架
  19. 公司将软件测试外包已成普遍现象?
  20. Python 用 matplotlib 中的 plot 画图,折线图

热门文章

  1. ERROR in Template execution failed: ReferenceError: process is not defined(使用electron-vue出现的错误)
  2. 古有书山“勤”为径,现今升职加薪何为“径”?
  3. python爬虫英文单词_Python爬虫入门案例:获取百词斩已学单词列表
  4. 简易小游戏——三子棋
  5. 一张图弄明白:从零维到十维空间(转)
  6. [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍
  7. C++(11):to_string及stoi
  8. win7局域网计算机 慢,Win7系统网络不稳定时快时慢如何解决?
  9. 分享一个好用的小工具
  10. Python实现正态分布指定区间内【置信区间】概率值计算