티스토리 뷰
서비스 : 애플리케이션 구성요소로 화면 없이 백그라운드에서 실행되는 하나의 단위
- startService 메소드를 호출할 때도 인텐트 객체를 파라미터로 전달해야 하며 이 인텐트 객체는 시스템으로 전달된 후 시스템에서 지정한 서비스를 만들고 실행하는 과정을 거치게 된다.
- onStartCommand 메소드가 호출되면 인텐트 객체를 파라미터로 전달받을 수 ㅇ, 따라서 인텐트 안에 들어있는 명령이나 데이터를 확인하여 필요한 기능을 수행할 수 ㅇ
- 서비스에서 액티비티로 인텐트를 보낼 때 액티비티에서 onNewIntent 메소드가 자동으로 호출된다.
MainActivity.java
package com.example.myservice;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText editText;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editText.getText().toString();
Intent intent = new Intent(getApplicationContext(), MyService.class);
intent.putExtra("command","show");
intent.putExtra("name",name);
startService(intent);
}
});
//밑의 onNewIntent 방법 아니면~
//Intent passedIntent = getIntent();
//processCommand(passedIntent);
}
//서비스에서 onCreat()는 한 번만 호출되고 나중에 onStartCommand()가 호출되는거랑 같은 식
@Override
protected void onNewIntent(Intent intent) {
//processCommand(intent);
if(intent != null){
String command = intent.getStringExtra("command");
String name = intent.getStringExtra("name");
Toast.makeText(this,"서비스로부터 전달받은 데이터 : "+command+", "+name,Toast.LENGTH_LONG).show();
}
super.onNewIntent(intent);
}
private void processCommand(Intent intent){
if(intent != null){
String command = intent.getStringExtra("command");
String name = intent.getStringExtra("name");
Toast.makeText(this,"서비스로부터 전달받은 데이터 : "+command+", "+name,Toast.LENGTH_LONG).show();
}
}
}
MyService.java
package com.example.myservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
private static final String TAG = "MyService";
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
//서비스는 한번 만들어지면 계속 실행되기 때문에 intent는 onStartCommand에서 처리됨
Log.d(TAG, "onCreate() 호출됨");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand() 호출됨");
if(intent==null) {
return Service.START_STICKY;
//서비스 종료됐을 때도 다시 실행해달라는 옵션
} else{
processCommand(intent);
}
return super.onStartCommand(intent, flags, startId);
}
private void processCommand(Intent intent){
String command = intent.getStringExtra("command");
String name = intent.getStringExtra("name");
Log.d(TAG, "전달받은 데이터 :"+command +", "+name);
//액티비티에서 서비스로 데이터 받기
//서비스가 액티비티로 데이터 보내기
try{
Thread.sleep(5000);
}catch (Exception e){}
Intent showIntent = new Intent(getApplicationContext(), MainActivity.class);
showIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|
Intent.FLAG_ACTIVITY_SINGLE_TOP|
Intent.FLAG_ACTIVITY_CLEAR_TOP);
showIntent.putExtra("command","show");
showIntent.putExtra("name",name+"from service.");
startActivity(showIntent);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy() 호출됨");
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
'Android' 카테고리의 다른 글
한 레이아웃에 프래그먼트 여러개 예시 (0) | 2020.04.22 |
---|---|
프래그먼트 예시 (0) | 2020.04.22 |
액티비티 수명주기에 따라 데이터 남겨두기 (0) | 2020.04.01 |
전화 걸기 연결 (+ 액티비티 구성 과정, 인텐트) (0) | 2020.04.01 |
스피너 spinner 예시 (0) | 2020.03.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카카오톡열기
- 상태드로어블
- 전화연결하기
- ios
- 전화걸기연결
- 비트맵버튼
- swift
- 터치리스너
- 다이얼연결
- Objective-C
- 안드로이드
- 인플레이터
- 어댑터
- 제스처디텍터
- 페이저타이틀스트립
- objc
- 뷰페이저
- 데이터
- 알림대화상자
- CaseIterable
- 스낵바설정
- 쉐이프드로어블
- subscript
- 표현패턴
- allcases
- 액션바
- prepareforreuse
- 프래그먼트매니저
- 부가데이터
- 프래그먼트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함