【问题标题】:IntentService crashes when startingIntentService 启动时崩溃
【发布时间】:2016-10-04 18:51:45
【问题描述】:

我的服务有问题。事实是,当它崩溃时,我的所有应用程序都会崩溃。 调试应用程序告诉我它在“onCreate”方法结束后崩溃(请参阅下面的代码)。似乎它甚至无法访问 onHandedIntent 但不确定! 我把我的代码和日志放在下面。我检查了清单,没有问题。

感谢大家的帮助

package com.example.pierr.puremusictest2;
import android.app.IntentService;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.util.Log;

import java.io.IOException;

public class MusicPlayerService extends IntentService{
static MediaPlayer mPlayer;
Intent gIntent;
String url = "http://lolilol.890m.com/Musique/CapitalKings/II/Capital_Kings_-_Satellites_Official_Audio_Video-r8.aac";

public MusicPlayerService() {
    super("mainThreadService");
    Log.i("blablabblablba","creation that's it2");
}

public void onCreate(){
    Log.i("blablabblablba","creation that's it2");
    mPlayer = new MediaPlayer();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    Log.i("blablabblablba","musicPlayer created");
}

@Override
protected void onHandleIntent(Intent argo0) {
play();
}


public void play(){
    try {
        Log.i("voila c'est cool","play");
        mPlayer.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();

    Log.i("test","destroy");       }
    mPlayer.start();

}

}

启动我的服务的意图:

case R.id.play:
            Intent intent = new Intent(getActivity(), MusicPlayerService.class);
            getActivity().startService(intent);
            break;

最后是日志:

 java.lang.RuntimeException: Unable to start service com.example.pierr.puremusictest2.MusicPlayerService@419ed5d8 with Intent { cmp=com.example.pierr.puremusictest2/.MusicPlayerService }: java.lang.NullPointerException
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2719)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:135)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:136)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5027)
                                                                                at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                                at dalvik.system.NativeStart.main(Native Method)
                                                                             Caused by: java.lang.NullPointerException
                                                                                at android.app.IntentService.onStart(IntentService.java:116)
                                                                                at android.app.IntentService.onStartCommand(IntentService.java:130)
                                                                                at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2702)
                                                                                at android.app.ActivityThread.access$2100(ActivityThread.java:135) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:136) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5027) 
                                                                                at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                                at dalvik.system.NativeStart.main(Native Method) 

【问题讨论】:

标签: android android-intent service intentservice


【解决方案1】:

在您的服务的onCreate() 方法中,在执行任何其他操作之前调用super.onCreate()。

请注意,使用IntentService 播放音乐是一个相当奇怪的选择:

  • 您的 onHandleIntent() 方法中没有任何东西看起来需要后台线程。

  • 一旦onHandleIntent() 返回,IntentService 将被销毁。我忘记了MediaPlayer 是否会停止播放(一旦丢失的MediaPlayer 对象被垃圾收集)或者你只是失去了对播放的控制。

【讨论】:

  • 但你是对的,一旦 onHandleIntent 返回 IntentService 就会关闭,我该怎么办?
  • @pierre-charlesMangin:不要使用IntentService。我不知道你的目标是什么。通常,如果您想在用户控制下播放背景音乐(例如,播放/停止),您会使用常规的Service,使用startService() 和stopService() 来控制服务,并通过扩展控制音乐播放.
  • 哦,我不知道 IntentService 比服务类限制这么多!我会尽力帮助像我这样的新程序员:D
  • @pierre-charlesMangin:它是为其他用例设计的。 IntentService 非常适合“事务性”工作:下载文件、应用大量数据库更新、生成 HTML 或 PDF 报告等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2013-09-22
  • 2018-06-01
相关资源
最近更新 更多