2017-01-31 11 views
0

私は、ユーザーによって殺されるまで、バックグラウンドでサウンドを再生する単純なアプリを開発しています。問題は、Chromeで30〜40個以上のタブを開いたときに音の再生が停止し、アプリを再度開く必要があることです。多くのクロムタブを開いてもアプリが機能しなくなるのはなぜですか?

スマートフォンには1GbのRAMしかありませんが、Chromeで100個以上のタブを開いても多くの音楽プレーヤーが動作することに気付いています。

これはコードである:

PlayerService.class:

public class PlayerService extends Service 
{ 
    MediaPlayer mediaPlayer = null; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     mediaPlayer = MediaPlayer.create(this, R.raw.song); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     if (!mediaPlayer.isPlaying()) { 
      mediaPlayer.start(); 
     } 
     return START_STICKY; 
    } 

    public void onDestroy() { 
     if (mediaPlayer.isPlaying()) { 
      mediaPlayer.stop(); 
     } 
     mediaPlayer.release(); 
     Log.i("PROVA SERVICE", "Distruzione Service"); 
    } 

} 

MainActivity.class:

public class MainActivity extends AppCompatActivity { 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



    } 

    public void play(View v) 
    { 

     startService(new Intent(this, PlayerService.class)); 
    } 

    public void stop(View v) 
    { 

     stopService(new Intent(this, PlayerService.class)); 
    } 
... 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <TextView android:text="Play!" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:onClick="play" 
     android:id="@+id/textView" 
     android:layout_centerHorizontal="true" 
     android:textStyle="bold" 
     android:textSize="20dp" /> 

    <TextView android:text="Stop!" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:onClick="stop" 
     android:layout_below="@+id/textView" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="50dp" 
     android:textSize="20dp" 
     android:textStyle="bold" /> 

</RelativeLayout> 

が、私は明らかにマニフェストにサービスを追加しました:だから、

<service android:name="PlayerService"/> 

を、問題は何ですか?

答えて

2

APIレベル5以降では、startForeground()メソッドを使用して、サービスをフォアグラウンドで開始できます。

文書は

がこの状態にある間にユーザーに表示される継続的な 通知を供給、フォアグラウンドで実行し、このサービスを作ると言います。デフォルトでは サービスはバックグラウンドです。つまり、システムがそれらを殺す必要がある場合には、より大きなメモリを回収するために(ウェブの大きなページをブラウザに表示するなど)、あまり害を受けることなく殺すことができます。サービスがバックグラウンドで音楽再生を行っている場合は のようにサービスの終了が妨げになる場合は フラグを設定することで、ユーザー は音楽の再生が停止したことに気づくでしょう。

+0

はい、正しいとはいえ、とにかくシステムによって終了させることができます。サービスがフォアグラウンドで実行されている場合は、ツールバーに通知を設定してユーザーに通知する必要があります。 – Mikhail

+0

通常はすぐにアプリを殺すことはありません – Krish

1

これは、デバイスに十分なメモリがなく、すべてのバックグラウンドサービスが終了するために発生します。 startForeground()メソッドを使用して、フォアグラウンドモードでサービスを開始してください。

関連する問題