Изучаю service, и возник вопрос по-поводу, передачи данных между сервисом и активити. Нашел
этот урок, и сделал все как в нем описано. Но при вызове сервиса - выбрасывает просто с программы, при этом в логах не пишет никаких exeption или ошибок. Просто такой диалог , и закрывается программа:
Вот мой код:активити:public class MainActivity extends AppCompatActivity {
private final int TASK1_CODE = 1;
private final int TASK2_CODE = 2;
private final int TASK3_CODE = 3;
public final static int STATUS_START = 100;
public final static int STATUS_FINISH = 200;
public static final String PARAM_TIME = "TIME";
public static final String PARAM_PINTENT = "PINTENT";
public static final String PARAM_RESULT = "RESULT";
private TextView textTask1, textTask2, textTask3;
private Button startService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textTask1 = (TextView) findViewById(R.id.task1);
textTask1.setText("task 1 ");
textTask2 = (TextView) findViewById(R.id.task2);
textTask2.setText("task 2");
textTask3 = (TextView) findViewById(R.id.task3);
textTask3.setText("task 3");
startService = (Button) findViewById(R.id.startButton);
startService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickStart();
}
});
}
private void onClickStart(){
PendingIntent pi;
Intent intent;
pi = createPendingResult(TASK1_CODE, null, 0);
intent = new Intent(getApplicationContext(), MyService.class)
.putExtra(PARAM_TIME, 7)
.putExtra(PARAM_PINTENT, pi);
startService(intent);
pi = createPendingResult(TASK2_CODE, null, 0);
intent = new Intent(getApplicationContext(), MyService.class)
.putExtra(PARAM_TIME, 4)
.putExtra(PARAM_PINTENT, pi);
startService(intent);
pi = createPendingResult(TASK3_CODE, null, 0);
intent = new Intent(getApplicationContext(), MyService.class)
.putExtra(PARAM_TIME, 6)
.putExtra(PARAM_PINTENT, pi);
startService(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == STATUS_START){
switch (requestCode){
case TASK1_CODE:{
textTask1.setText("task 1 start");
break;
}
case TASK2_CODE:{
textTask2.setText("task 2 start");
break;
}
case TASK3_CODE:{
textTask3.setText("task 3 start");
break;
}
}
}
if (resultCode == STATUS_FINISH){
int result = data.getIntExtra(PARAM_RESULT, 0);
switch (requestCode){
case TASK1_CODE:{
textTask1.setText("task 1 finish, result = " + result );
break;
}
case TASK2_CODE:{
textTask2.setText("task 2 finish, result = " + result);
break;
}
case TASK3_CODE:{
textTask3.setText("task 3 finish , result = " + result);
break;
}
}
}
}
}
и сервис:public class MyService extends Service {
private final String LOG = "MYSERVICELOG";
private ExecutorService executorService;
@Override
public void onCreate() {
super.onCreate();
Log.d(LOG, "onCreate");
executorService = Executors.newFixedThreadPool(2);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(LOG, "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG, "onStartCommand");
int time = intent.getIntExtra(MainActivity.PARAM_TIME, 1);
PendingIntent pi = intent.getParcelableExtra(MainActivity.PARAM_PINTENT);
MyRun myRun = new MyRun(time, startId, pi);
executorService.execute(myRun);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
class MyRun implements Runnable{
private int time, startId;
private PendingIntent pendingIntent;
public MyRun(int time, int startId, PendingIntent pendingIntent){
this.time = time;
this.startId = startId;
this.pendingIntent = pendingIntent;
Log.d(LOG, "MyRun# " + startId + " created");
}
@Override
public void run() {
Log.d(LOG, "MyRun# " + startId + " time: " + time + " start");
try {
pendingIntent.send(MainActivity.STATUS_START);
TimeUnit.SECONDS.sleep(time);
Intent intent = new Intent()
.putExtra(MainActivity.PARAM_RESULT, time *100);
pendingIntent.send(MyService.this, MainActivity.STATUS_FINISH, intent);
}catch (PendingIntent.CanceledException ce){
ce.getStackTrace();
}catch (InterruptedException ie){
ie.getStackTrace();
}
stop();
}
private void stop(){
Log.d(LOG, "MyService# " + startId + " stoped" );
stopSelfResult(startId);
}
}
}
В чем может быть проблема ??Помогите, не могу понять !!