4대 구성 요소 중 하나Activity
5925 단어 응용 개발
1.1 현식 Intent는 간단해서 안드로이드를 조금 아는 사람들은 모두 알고 있습니다. 저는 단지 하나의 예를 들면 여러분도 알 수 있습니다.
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent)
1.2 암시적 Intent 소개
SecondActivity의 등록 구성을 수정해야 합니다.
那么我们在跳转到这个activity类中的时候就要这样写。
Intent intent = new Intent(“com.example.activity.ACTION_START”); startActivity(intent)
너는 아마도 물어볼 것이다. 왜 category를 지정하지 않았을까, 사실android.intent.category.DEFAULT는 기본 category입니다. startActivity를 호출하면 자동으로 이 category를 intent에 추가합니다.
각 Intent는 action을 하나만 지정할 수 있지만 여러 category를 지정할 수 있습니다.예를 들다
그럼 이 액티브 클래스로 넘어갈 때 이렇게 써야 돼요.
Intent intent = new Intent(“com.example.activity.ACTION_START”); intent.addCategory("com.example.activity.MY_CATEGORY") startActivity(intent)
이런 은밀한 Intent와 같이 안드로이드는 브라우저를 여는 것과 같은 많은 것을 내장하고 있다
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")) startActivity(intent)
데이터 탭도 설정할 수 있습니다. 현재 활동이 어떤 종류의 데이터에 응답할 수 있는지 정확하게 지정하는 데 사용됩니다. 이 탭은 주로 내용을 설정할 수 있습니다.
android:scheme: 지정한 데이터의 프로토콜 부분, 예를 들어 http,ftp,https
android:host: 데이터를 지정하는 호스트 이름 부분, 예를 들어 "www.baidu.com"
android:port: 데이터를 지정하는 포트 부분에 사용되며 일반적으로 호스트 이름 다음에 따른다. 예를 들어 5037 포트
android: path: 호스트 이름과 포트 뒤의 부분을 지정합니다. 예를 들어 도메인 이름 뒤에 있는 내용과 같습니다.
android: mimetype: 처리할 수 있는 데이터 형식을 지정하는 데 사용되며, 어댑터를 사용하여 지정할 수 있습니다.
데이터 탭에 지정된 내용과 Intent에 있는 데이터가 완전히 일치해야만 현재 활동이 Intent에 울릴 수 있음을 기억하십시오.그러나 일반적인 데이터에서는 너무 많은 내용을 지정하지 않고 이 라벨을 거의 사용하지 않는 경우가 많다.
물론 안드로이드 매니페스트에 액티비티를 직접 써도 됩니다.xml에서 자신의 브라우저를 설정합니다. 내장된 호출은 시스템의 브라우저입니다. 이 브라우저 기능을 직접 작성해야 호출할 수 있습니다.자체 구성은 다음과 같습니다.
운행이 어떻게 되는지 너는 한번 시험해 볼 수 있다.
2. Activity의 라이프 사이클
이것은android를 배우는 데 필수적인 기술이지만,onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy(),onRestart()만 아는 사람이 많을 수도 있지만,언제 이런 방법을 사용했는지는 잘 모르겠습니다.이해하기 어려운 몇 가지만 말씀드리겠습니다.
1.이벤트가 onPause () 상태에 있으면 (사용자가 볼 수 있지만 조작할 수 없습니다) 다시 이 이벤트로 돌아오면 onpause () -> onResume ()
2.만약에 이벤트가 onStop() 상태(사용자가 볼 수 없고 메모리에 긴장되었을 때 죽을 위험에 직면할 경우), 죽이지 않으면 onRestart()->onStart()->onResume;죽이면 onCreate()가 다시 만들어집니다. 이때 이전의 데이터가 없어집니다. 이런 일이 발생하지 않도록 onSaveInstanceState() 리셋 방법에서 현재 활동에 필요한 데이터를 저장하고 onCreate()에서 만들 때 꺼내 사용하면 됩니다.
다른 건 별거 없을 거예요.
3.Activity 시작 모드
부팅 모드는 네 가지standard,singleTop,singleTask,singInstance로 나뉜다.이 지식은 처음 배울 때, 심지어 일부 프로젝트를 할 때 이 지식을 만나지 못했지만 나는 매우 중요하다고 생각한다. 왜냐하면 때때로 작은 버그가 네가 여기저기 찾아봐도 원인을 찾지 못하기 때문이다. 아마도 너의 시작 모드 설정이 잘못되었을 것이다. 적어도 이 문제는 내가 만난 적이 있다. 바로 그때서야 나는 와세, 안드로이드가 이 속성 설정을 해야 한다는 것을 알게 되었다.얼른 연구해 봐.
이 설정 속성은 안드로이드 매니페스트에 있습니다.xml에서 탭에 android:launchMode 속성을 지정해서 시작 모드를 선택합니다.
3.1.standard
이것은 매우 간단합니다. 모든 앱에 자신의 복귀 창고가 있습니다. 시작할 때마다Activity가 창고에 들어갑니다. 이 창고에 이Activity가 있든 없든, 예를 들어FirstActivity에서SecondActivity로 이동하고, SecondActivity에서FirstActivity()로 이동하면 이 창고에는FirstActivity 2개, SecondActivity 2개가 있습니다.
3.2.singleTop
이것도 어렵지 않아요.예를 들어FirstActivity를 열고FirstActivity에서FirstActivity로 이동하면 이 창고에는FirstActivity만 있습니다. 그러나 이런 상황은 프로젝트에서 자주 볼 수 없습니다. Activity+Fragment 전단 프레임워크만 사용할 수 있는 것 같지만 데이터 업데이트 문제에 주의해야 합니다.
FirstActivity가 창고 위에 없으면 다음에 FirstActivity로 넘어가면 하나가 생성됩니다.
3.3. singleTask
만약 이러한 시작 모드를 사용한다면 모든 활동은 전체 프로그램의 상하문에 하나의 실례만 존재할 것이다. 즉, 이 활동을 시작할 때마다 시스템은 먼저 창고로 돌아가 이 활동의 실례가 존재하는지 확인하고 이미 존재하는 것을 발견하면 이 실례를 사용하고 이 활동 위의 모든 활동을 창고에서 모두 내보낸다.발견하지 못하면 새로운 활동 실례를 만들 것입니다.
예를 들어 SecondActivity에서FirstActivity를 시작할 때 이미FirstActivity의 실례가 있고 secondActivity가 그 위에 있으면 SecondActivity는 창고로 돌아가고FirstActivity는 창고 꼭대기 활동이 되며, 이때FirstActivity의 상태는onstop()->onRestart()에서SecondActivity의 상태는 onResume->onPause->onStop()->onDestory().
3.4. singleInstance
이것은 가장 특수하고 복잡한 것이라고 할 수 있다. 우리가 전에 말했듯이 모든 앱은 보통 창고로 되돌아온다. 그러나 만약에 어떤Activity의 시작 모드를 이것으로 설정하면이 Activity는 이 이벤트를 관리하기 위해 창고로 돌아가는 것을 독점합니다. (사실singleTask 모드가 다른taskAffinity를 지정하면 새 창고를 시작합니다.)
이 시작 모드는 여러 앱이 하나의activity 활동을 공유하는 장면에 비교적 적합하다.어느 앱이 이 이벤트를 방문하든지 공용되는 동일한 복귀창고는 공유 이벤트의 실례를 해결한다.
예를 들다
우리는FirstActivity에서SecondActivity(이Activity의 시작 모드는singleInstance로 설정됨)로 이동하고,SecondActivity에서ThirdActivity로 이동합니다.우리가 백 키를 눌렀을 때 ThirdActivity가FirstActivity로 직접 되돌아오는 것을 발견할 수 있습니다. 백 키를 눌러야 SecondActivity로 돌아갈 수 있고, 마지막에 백 키를 눌러야 이 앱을 종료할 수 있습니다.
FirstActivty와 ThirdActivity는 같은 창고에 있고 SecondActivity는 다른 창고에 있기 때문에 현재 활동이 있는 창고를 비운 다음 다른 창고를 비웁니다.
오늘 먼저 이렇게 많은 것을 총결산합시다. 틀린 것이 있으면 여러분이 지적해 주십시오. 좋아하는 학우들은 한 번 대들고 본인이 계속 쓸 수 있도록 격려해 주십시오.