1
私のサービスが動作するサービスクラスがあります。私の唯一の問題は、自分のサービスがmediaplayerを作成するときに、ハングしたようなUIを一時停止します。私は再生ボタンを押すと、トーストメッセージが表示され、「接続中」と表示され、メディアプレーヤーが準備されていることを示すトーストメッセージが表示され、「接続済み」と表示された場合、メディアプレイヤーは、その後半..mediaplayerとservice class
HERESに私のサービスコードを実行します。
public class myservice extends Service {
MediaPlayer player;
private Handler UIHandler = new Handler();
private Uri source = Uri.parse("http://www.mydomain.com:8000/listen.mp3");
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
public void onCreate() {
Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
player = MediaPlayer.create(this, source);
}
private void testtoast() {
Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
}
public void onStart(Intent intent, int StartId) {
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
player.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer player) {
// TODO Auto-generated method stub
player.start();
}
});
}
public void onDestroy() {
Toast.makeText(this, "Destroyed", Toast.LENGTH_SHORT).show();
player.stop();
player.release();
}
}
私は個人的に 'MediaPlayer'クラスを使用していないので、使用方法や' .create() 'を実行したときの動作についてはわかりません。しかし、私はそれは、 'サービス 'がUIスレッド内で実行されることを指摘する価値があると考えました。これは、 'onCreate()'のように 'Service'内で時間のかかる作業を行うと、UIの応答性に影響を与え、注意を払わないとANRが発生することを意味します。したがって、あなたが 'サービス '内で行う時間のかかる作業やプロセス集約的な作業は、依然として別の'スレッド 'で実行されるべきです。 – Trevor
トレバーを指摘してくれてありがとう、私はそれを行うことができる方法についてのサンプルを持っていますか?本当にアンドロイドのnoob – HeartlessArchangel