마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리시버에서 startActivity나 태스크생성왜해야하는건가요..

0 추천

if(intent.getAction().equals(intent.ACTION_SCREEN_OFF)){

            Intent i = new Intent(context,MainActivity.class);
            i.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);

        }

여기서 i.addFlags해서 새로운 태스크를 만들던데 .. 왜만드는지궁금합니다

그리고 스타트액티비티할때 왜 뒤에 context를 붙이나요..

그리고 마지막으로 저기 인텐트 선언할때 리시버클래스명 대신에 왜 context쓰는지도 궁금합니다.

감사합니다

 

중학생학생 (180 포인트) 님이 2020년 3월 18일 질문

1개의 답변

0 추천

여기서 i.addFlags해서 새로운 태스크를 만들던데 .. 왜만드는지궁금합니다

=> startActivity 는 새로운 activity를 activity 에 쌓고 그 activity 로 이동하는 방식인데, 리시버는 activity가 아니기 때문에, 쌓을 activity가 없어 명시적으로 새로운 테스크에 쌓으라고 플레그를 주는 것입니다.

보다 자세한 사항은 https://programmingfbf7290.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%83%9C%EC%8A%A4%ED%81%AC-launchMode-Intent-%ED%94%8C%EB%9E%98%EA%B7%B8-%EC%B4%9D%EC%A0%95%EB%A6%AC 의 taskAffinity 속성 부분을 읽어 보세요.

 스타트액티비티할때 왜 뒤에 context를 붙이나요..

=> startActivity 는 context 의 메소드 입니다.

 Activity의 경우 Context를 상속 받아 구현한 클래스라 내부 메소드로 startActivity 가 있어서 굳이 context.startActivity같이  부를 필요가 없지만, 

리시버는 Context를 상속받아 구현한 클래스가 아니다 보니 startActivity 메소드 자체가 없어서, 

context의 startActivity를 호출 하는 것입니다.

 

그리고 마지막으로 저기 인텐트 선언할때 리시버클래스명 대신에 왜 context쓰는지도 궁금합니다.

=>  생성하는 인텐트의 원형은  Intent(Context packageContext, Class<?> cls)  로

첫번째 단에 context 값이 들어가야 합니다.

 두번째 답해드렸듯이 리시버는 context를 상속받아 구현된 클래스가 아니기  때문에, 

 별도의 context를 넣은 것으로, context를 상속받은  activity 라면 activity.this 같이 자체 클래스를 넣는 것도 가능 합니다.

익명사용자 님이 2020년 3월 18일 답변
우와..정말감사합니다.....
...