在应用程序上下文中调用时,startService不启动

时间:2014-03-03 14:27:50

标签: android

startService未启动该服务。我从应用程序上下文中调用它,但是尽管从startService之前获取了控制台日志消息,但我没有从服务中获取任何一个。

public class AntoxOnFriendRequestCallback implements OnFriendRequestCallback {

private static final String TAG = "im.tox.antox.TAG";
public static final String FRIEND_KEY = "im.tox.antox.FRIEND_KEY";
public static final String FRIEND_MESSAGE = "im.tox.antox.FRIEND_MESSAGE";

private Context ctx;

public AntoxOnFriendRequestCallback(Context ctx) {
    this.ctx = ctx;
}

@Override
public void execute(String publicKey, String message){
    Log.d(TAG, "Friend request callback");
    Intent intent = new Intent(this.ctx, ToxService.class);
    intent.setAction(Constants.FRIEND_REQUEST);
    intent.putExtra(FRIEND_KEY, publicKey);
    intent.putExtra(FRIEND_MESSAGE, message);
    this.ctx.startService(intent);
}
}

这是要点:https://gist.github.com/ollieh/ed93a647430645fd2ee0

使用getApplicationContext()在ToxService的第61行调用AntoxFriendRequestCallback

我在AntoxFriendRequestCallback第15行的日志中看到“朋友请求回调”

我没有在ToxService的第140行的日志中看到“Constants.FRIEND_REQUEST”,也没有在MainActivity的第20行看到“test”。

如果您想查看完整文件,请访问: https://github.com/ollieh/Antox/tree/83eb974589a4664b2098bc0561fd0060960cfe22/app/src/main/java/im/tox/antox

2 个答案:

答案 0 :(得分:1)

发现问题。之前在应用程序中使用DO_TOX意图调用了startService,并且在处理该问题的服务中,有一个无限循环旨在重复调用某些东西,但这阻止了任何新的startService()s在它们获得时工作排队,需要最后完成。我用ScheduledExecuterService替换了无限循环,现在它可以工作。

答案 1 :(得分:0)

您必须确定服务是否在“androidmanifest.xml”中声明,如:

<service
    android:name="[your service class]"
    android:enabled="true"
    android:icon="@drawable/ic_launcher" >
</service>

Intent intent = new Intent(this.ctx, ToxService.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//add this line
intent.setAction(Constants.FRIEND_REQUEST);
intent.putExtra(FRIEND_KEY, publicKey);
intent.putExtra(FRIEND_MESSAGE, message);
this.ctx.startService(intent);