2012-03-06 8 views
1


startService()メソッドを呼び出してサービスを開始するアンドロイドアプリを1つ作成しました。割り当てられたタスクが完了したらサービスを停止したい。対応するタスクが完了していることを確認するにはどうすればよいですか? onStartCommand()でstopSelf()を呼び出すことはできますか? stopSelf()メソッドまたはstopService()メソッドを呼び出すベストプラクティスは何ですか?どこでその呼びかけをするべきですか?
ありがとうございます!サービスを停止するためにAndroidのstopSelf()メソッドまたはstopService()メソッドを呼び出すことはできますか?

+0

あなたは、あなたのAndroid SDKディレクトリを開き、開い 'AlarmService_Service.java'詳細についてはApiDemos' SRC/com.example.android.apis.app'に閲覧することができます。 –

答えて

0
// main.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"> 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:text="Services Demo" android:gravity="center" android:textSize="20sp" android:padding="20dp"/> 
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonStart" android:text="Start"></Button> 
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop" android:id="@+id/buttonStop"></Button> 
</LinearLayout> 



//Activity class 


public class ServicesDemo extends Activity implements OnClickListener { 
    private static final String TAG = "ServicesDemo"; 
    Button buttonStart, buttonStop; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    buttonStart = (Button) findViewById(R.id.buttonStart); 
    buttonStop = (Button) findViewById(R.id.buttonStop); 

    buttonStart.setOnClickListener(this); 
    buttonStop.setOnClickListener(this); 
    } 

    public void onClick(View src) { 
    switch (src.getId()) { 
    case R.id.buttonStart: 
     Log.d(TAG, "onClick: starting srvice"); 
     startService(new Intent(this, MyService.class)); 
     break; 
    case R.id.buttonStop: 
     Log.d(TAG, "onClick: stopping srvice"); 

stopService(new Intent(this, MyService.class)); 
     break; 
    } 
    } 
} 

//Service class 

public class MyService extends Service { 
    private static final String TAG = "MyService"; 
    MediaPlayer player; 

    @Override 
    public IBinder onBind(Intent intent) { 
     Toast.makeText(this, "My Service Bind", Toast.LENGTH_LONG).show(); 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onCreate"); 

     player = MediaPlayer.create(this, R.raw.preview); 
     player.setLooping(false); // Set looping 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onDestroy"); 
     player.stop(); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onStart"); 
     player.start(); 
    } 
} 
2

特定のタスクを実行してサービスを停止する場合は、IntentServiceを使用することをお勧めします。 IntentServiceを使用すると、タスクが完了したときにBroadCastReceiverを使用して通知が届きます。 Hereは完全な説明の例です。

関連する問題