我有一些程序,我希望保存服务实例并在其他活动中使用它。但服务并没有创造。 请看代码。
MainActivity.java:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainService.get(this);
}
}
MainService.java:
public class MainService extends Service {
public static Object sWait = new Object();
public static MainService instance;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static MainService get(Context mContext) {
if (instance == null) {
Intent intent = new Intent(mContext, MainService.class);
mContext.startService(intent);
}
while (true) {
if (instance != null) {
Log.v("myLogs", "all is good!");
break;
}
synchronized (sWait) {
try {
sWait.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return instance;
}
@Override
public void onCreate() {
Log.v("myLogs", "created!");
instance = this;
synchronized (sWait) {
sWait.notify();
}
}
}
当我在MainService.get()中使用时,服务会创建。我将此服务添加到清单文件中。我不知道哪里有错误。我需要你的帮助。
答案 0 :(得分:0)
开始使用服务(从您的活动中调用此内容!):
Intent serviceIntent = new Intent(this, MainService.class);
startService(serviceIntent);
请参阅文档:https://developer.android.com/training/run-background-service/send-request.html
答案 1 :(得分:0)
这绝对不是你应该在android中使用服务的方式。 我建议你重温the offical android docs。 要快速了解,请访问tutorial here。
答案 2 :(得分:0)
这不是你应该在Android中使用Service的方式。
您可能需要使用“活动”中的bindService()
来电。
在此处查看有关绑定服务的更多信息http://developer.android.com/guide/components/bound-services.html
如果您每次绑定服务时都需要该服务为相同实例,请在应用程序启动时调用startService一次。
示例代码:
public class LocalBinder<T> extends Binder {
private WeakReference<T> mService;
public LocalBinder(T service) {
mService = new WeakReference<T>(service);
}
public T getService() {
return mService.get();
}
}
public class MyService extends Service {
private final LocalBinder<MyService> binder;
public MyService() {
binder = new LocalBinder<MyService>(this);
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
}
public class MyActivity extends Activity implements ServiceConnection {
@Override
protected void onStart() {
super.onStart();
bindService(new Intent(this, MyService.class), this, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
unbindService(this);
}
@SuppressWarnings("unchecked")
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyService serv = ((LocalBinder<MyService>) service).getService();
// serv is your service instance now
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}