我面临的奇怪问题.我想在创建活动时启动服务.这是我的服务代码(很简单,你会看到):
package com.nblmedia.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class ServiceSynchro extends Service {
public ServiceSynchro()
{
Log.i(XXX.LOG, "ServiceSynchro");
}
@Override
public IBinder onBind(Intent intent) {
Log.i(XXX.LOG, "onBind");
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i(XXX.LOG, "onCreate");
super.onCreate();
}
@Override
public void onDestroy() {
Log.i(XXX.LOG, "onDestroy");
// TODO Auto-generated method stub
super.onDestroy();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的AndroidManifest.xml中,我已将服务声明如下:
<service android:name=".ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)
最后,为了启动我的服务,我在onCreate中调用了startService方法:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
startService(new Intent(UserMenuActivity.this, ServiceSynchro.class));
}
Run Code Online (Sandbox Code Playgroud)
没有任何反应.如果我检查设备的运行服务,则没有运行名为ServiceSyncho的服务.如果我检查Logcat,则不输出任何内容.对于断点而言,应用程序不会循环通过服务的生命周期事件.知道什么可能是我的问题吗?
我发现了这个问题.在我的AndroidManifest.xml文件中,service:name属性未引用服务的完全限定类名.例如,我使用这个:
<service android:name=".ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)
当我需要时:
<service android:name="com.xxx.service.ServiceSynchro"></service>
Run Code Online (Sandbox Code Playgroud)
android:name 实现服务的Service子类的名称.这应该是一个完全限定的类名(例如"com.example.project.RoomService").但是,作为简写,如果名称的第一个字符是句点(例如".RoomService"),则它将附加到元素中指定的包名称.
最后,我更新了代码以覆盖onStartCommand命令,因为不推荐使用onStart方法.
public int onStartCommand(Intent intent, int flags, int startId)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4247 次 |
| 最近记录: |