Android - 服务无法创建

时间:2014-11-29 00:09:23

标签: java android

我有一些程序,我希望保存服务实例并在其他活动中使用它。但服务并没有创造。 请看代码。

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()中使用时,服务会创建。我将此服务添加到清单文件中。我不知道哪里有错误。我需要你的帮助。

3 个答案:

答案 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) {
    }
}