목차
동적 설정
特别注意的坑
singleInstance返回任务栈
singleTask多任务栈启动问题
singleTask的TaskAffinity与allowTaskReparenting参数
위챗 애플릿 미니 프로그램 개발 Activity 시작 모드를 살펴보겠습니다.

Activity 시작 모드를 살펴보겠습니다.

Dec 10, 2020 pm 05:10 PM
미니 프로그램

미니 프로그램 개발 튜토리얼활동 시작 모드 관련 정보를 주로 소개합니다

Activity 시작 모드를 살펴보겠습니다.

권장(무료): 미니 프로그램 개발 튜토리얼

머리말

보통 활동을 시작하면 직접 시작 startActivity는 활동의 시작 모드에 주의를 기울이지 않을 수 있으며 기본적으로 기본 시작 모드에서 시작됩니다. 그러나 시작 모드가 때로는 더 중요합니다. 예를 들어, 활동이 한 번만 시작되고 여러 인스턴스가 없도록 하려면 해당 활동을 SingleTask 모드로 설정해야 할 수 있습니다. 따라서 이러한 시작 모드를 이해하는 것이 필요합니다. 동시에 시작 모드 ≠ 시작 모드는 디스플레이 시작과 암시적 시작을 의미합니다. 나중에 디스플레이 시작과 암시적 시작을 설명하는 전용 기사를 준비하겠습니다.

작업 스택 소개

시작 모드를 이해하려면 먼저 작업 스택의 개념을 이해해야 합니다. 여기서는 태스크 스택의 구현 원리에 대해 자세히 설명하지 않겠습니다. 여기서는 태스크 스택이 무엇인지 간략하게 소개하겠습니다. 우리가 시작하는 활동 인스턴스는 작업 스택이라는 곳에 배치됩니다. 우리 모두는 스택이 "후입선출"의 특성을 가지고 있다는 것을 알고 있습니다. 예를 들어 작업 스택은 배드민턴 튜브이고 활동 인스턴스는 하나씩 배드민턴입니다. 따라서 앱을 시작하면 작업 스택이 자동으로 생성된 다음 여기에 활동 인스턴스가 생성됩니다. 활동을 파괴하기 위해 Return 키를 누르면 이러한 활동이 차례로 작업 스택에서 나옵니다. 물론 앱에는 여러 작업 스택이 있을 수 있습니다. 예를 들어 SingleInstence를 사용하여 시작된 활동은 독립적인 작업 스택에 있습니다. 작업 스택의 개념을 이해한 후에는 활동의 네 가지 시작 모드를 살펴볼 수 있습니다.

Activity의 4가지 시작 모드 분석

standard

표준 시작 모드이며 기본적으로 이 시작 모드입니다. 이 시작 모드의 활동이 시작될 때마다 동일한 인스턴스가 스택에 이미 존재하는지 여부에 관계없이 새 인스턴스가 생성되어 스택에 배치됩니다. 이것은 또한 이해하기 가장 쉽습니다.

singleTop

이름에서 알 수 있듯이 스택의 맨 위는 단일 인스턴스입니다. 그것은 무엇을 의미합니까? 지금 ActivityA를 시작했지만 현재 스택 상단에 ActivityA 인스턴스가 이미 있으므로 이번에는 새 인스턴스가 생성되지 않는다고 가정합니다. 그러나 동일한 인스턴스가 스택 상단에 존재하는 경우 새 인스턴스가 계속 생성됩니다. 예를 들어, 스택의 현재 활동은 ABC이고 스택 맨 위에는 A가 있습니다. 그러면 이때 A가 시작되면 다른 A 액티비티가 생성되지 않고 A의 onNewIntent 메서드가 실행되지만 이때 C 액티비티가 시작되면 A는 스택 맨 위에 있는 C가 아니기 때문에 새로운 C가 생성됩니다. 인스턴스가 계속 생성되지만 현재 스택 상황은 CABC입니다.

singleTask

단일 작업 모드. 이 모드는 스택 상단에 있든 없든 활동의 시작 스택에 단일 인스턴스만 존재할 수 있음을 의미합니다. 다른 시작 모드와 달리 이 시작 모드에서는 시작할 스택을 지정할 수 있습니다. 예를 들어 스택 Main이 있지만 활동 A에 대해 스택 이름 dev를 지정할 수 있습니다. 그런 다음 A가 시작되면 dev라는 스택이 생성됩니다. 따라서 SingleTask의 의미는 SingleTask의 시작 모드로 활동을 시작할 때 스택에 동일한 인스턴스가 없으면 지정된 스택에 동일한 인스턴스가 있으면 새 인스턴스가 생성되어 스택에 저장된다는 것입니다. 예를 들어 스택에 ABC가 있고 B를 시작하면 이번에는 새 B 인스턴스를 생성하지 않고 B를 스택 맨 위에 놓고 A를 밀어낸 다음 B의 onNewIntent 메서드를 실행합니다. 이번에는 스택 상황이 BC입니다.
주의 깊은 독자라면 "밀어내기"를 발견할 것입니다. 예, 우리 모두는 스택이 후입선출 방식이라는 것을 알고 있습니다. 예를 들어, 배드민턴 3개를 튜브에 넣었다면 중간 배드민턴을 꺼내려면 위쪽 것만 먼저 꺼낼 수 있습니다. 이유는 B를 스택 맨 위로 올리려면 A를 밀어야 하기 때문입니다. 많은 독자들이 시작 후 BAC라고 잘못 생각할 수도 있지만 실제로는 BC입니다. B가 나오기 전에 A가 먼저 스택에서 튀어나와야 하기 때문입니다. 같은 방식으로 스택에 ADFBC가 있으면 이 스타트업 B도 BC이고 위의 모든 항목이 스택에서 팝됩니다.

singleInstance

단일 케이스 모드. 이것은 SingleTask의 향상된 버전입니다. 그는 스스로 새 스택을 생성하고 이 새 인스턴스를 그 안에 넣을 것이며, 이 스택은 이 활성 인스턴스만 보유할 수 있습니다. 따라서 이 활동이 반복적으로 시작되면 이 활동의 ​​onNewIntent 메서드가 호출되어 이 스택으로 전환되며 새 인스턴스가 생성되지 않습니다.

시작 모드를 설정하는 두 가지 방법

이제 활동의 네 가지 시작 모드를 이해했으므로 시작 모드를 지정하는 방법을 살펴보겠습니다.

정적 설정

정적 설정은 AndroidManifest에서 특정 활동에 대한 시작 모드를 설정하는 것입니다. 활동에 대한 launchMode 매개변수를 지정하여 시작 모드를 설정합니다. 예:

 <activity android:name=".MainActivity"
      android:launchMode="singleInstance"/>
로그인 후 복사

동적 설정

동적 설정은 활동을 시작할 때 시작 모드를 지정하는 것입니다. 예:

Intent intent = new Intent();
intent.setClass(this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
로그인 후 복사

可以看到我们通过intent.addFlags这个方法来指定启动模式,这个方法传入一个参数来指定启动模式,其他的参数有:

  • FLAG_ACTIVITY_NEW_TASK:singleTask模式
  • FLAG_ACTIVITY_SINGLE_TOP:singleTop模式
  • FLAG_ACTIVITY_CLEAR_TOP:清除该活动上方的所有活动。一般和singleTask一起使用。但是如果你的启动模式是standard,那么这个活动连他之上的所有活动都会被出栈再创建一个新的实例放进去。例如现在栈中是ABCD,以FLAG_ACTIVITY_CLEAR_TOP+standard模式启动C的时候,首先清理掉ABC,是的,C也会被清理,然后再创建一个新的C放进去,执行之后就是CD。

特别注意的坑

singleInstance返回任务栈

现在模拟一个场景:现在有三个活动 A,B,C。A和C的启动模式都是standard,B的启动模式是singleInstance。先启动A,再启动B,然后再启动C。这个时候问题来了,如果我这个时候按下返回键,是回到B吗?答案是回到A。再按一下呢,返回桌面吗?答案是回到B,再按一下再回到桌面。其实不难理解。我们都知道singleInstance会创建一个独立的栈,当我们启动A的时候,A位于栈First中,启动B的时候,就会创建一个栈Second并把B实例放进去。这个时候再启动C,就会切换到栈FIrst,因为singleInstance创建的栈只能放一个,所以C会放到栈First中,当按下返回的时候,栈First中的活动就会依次出栈,直到全部出完,才会切换到栈Second中。所以要注意这个点。

singleTask多任务栈启动问题

这个问题和上面singleTop的本质是一样的。模拟一个场景:现在有两个栈:First:ABC;Second:QWE。栈First位于前台,栈Second位于后台。A位于栈顶。这个时候以singleTask的模式启动W,会发生什么样的情况呢?首先会切换到栈Second,再把Q出栈,W提到栈顶,并执行W的onNewIntent方法。这个时候按返回键就会把Second栈中的活动依次出栈,全部出完后才会切换到栈First。

singleTask的TaskAffinity与allowTaskReparenting参数

前面我们讲到给singleTask模式指定要启动的任务栈的名字,怎么指定呢?可以在AndroidManifest中指定相关的属性,如下:

<activity android:name=".Main2Activity"
     android:launchMode="singleTask"
     android:taskAffinity="com.huan"
     android:allowTaskReparenting="true"/>
로그인 후 복사

这里解释一下这两个参数

  • taskAffinity:指定任务栈的名字。默认的任务栈是包名,所以不能以包名来命名。
  • allowTaskReparenting:这个参数表示可不可以切换到新的任务栈,通常设置为true并和上面的参数一起使用。

我前面讲到可以给singleTask的活动指定一个栈名,然后启动的时候,就会切换到那个栈,并把新的活动放进去。但是如果设置allowTaskReparenting参数为false的话是不会切换到新的栈的。这个参数的意思是可不可以把新的活动转移到新的任务栈。简单点来说:当我们启动一个singleTask活动的时候,这个活动还是留在启动他的活动的栈中的。但是我们指定了taskAffinity这个参数,或者启动的活动是别的应用中的活动,那么就会创建一个新的任务栈。如果allowTaskReparenting这个参数是true的话,那么这个活动就会放到那个新的任务栈中。这样应该就可以明白了。所以这两个经常是配套一起使用的。

总结

活动的启动模式有四种,每种的功能都不一样,可以结合具体需要去使用,但是最重点还是要了解他的实现原理,栈中是怎么变化的,这个是比较重要的。了解这个之后那些特殊情况也就很容易理解了。
上面我讲的只是简单的使用,关于活动启动模式还有很多要了解。后续可能会解析一下,读者也可以自行去深度了解。

相关免费推荐:编程视频课程

위 내용은 Activity 시작 모드를 살펴보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python을 사용하여 WeChat 애플릿 개발 Python을 사용하여 WeChat 애플릿 개발 Jun 17, 2023 pm 06:34 PM

모바일 인터넷 기술과 스마트폰의 대중화로 인해 WeChat은 사람들의 삶에 없어서는 안될 애플리케이션이 되었습니다. WeChat 미니 프로그램을 사용하면 사람들은 애플리케이션을 다운로드하고 설치하지 않고도 미니 프로그램을 직접 사용하여 몇 가지 간단한 요구 사항을 해결할 수 있습니다. 이 기사에서는 Python을 사용하여 WeChat 애플릿을 개발하는 방법을 소개합니다. 1. 준비 Python을 사용하여 WeChat 애플릿을 개발하기 전에 관련 Python 라이브러리를 설치해야 합니다. 여기서는 wxpy와 itchat 두 라이브러리를 사용하는 것이 좋습니다. wxpy는 위챗 머신입니다

작은 프로그램이 반응할 수 있나요? 작은 프로그램이 반응할 수 있나요? Dec 29, 2022 am 11:06 AM

미니 프로그램은 반응을 사용할 수 있습니다. 사용 방법: 1. "react-reconciler"를 기반으로 렌더러를 구현하고 DSL을 생성합니다. 2. DSL을 구문 분석하고 렌더링하기 위한 미니 프로그램 구성 요소를 만듭니다. 3. npm을 설치하고 개발자를 실행합니다. 도구에서 npm을 빌드합니다. 4. 자신의 페이지에 패키지를 소개한 다음 API를 사용하여 개발을 완료합니다.

WeChat 미니 프로그램에서 카드 뒤집기 효과 구현 WeChat 미니 프로그램에서 카드 뒤집기 효과 구현 Nov 21, 2023 am 10:55 AM

WeChat 미니 프로그램에서 카드 뒤집기 효과 구현 WeChat 미니 프로그램에서 카드 뒤집기 효과를 구현하는 것은 사용자 경험과 인터페이스 상호 작용의 매력을 향상시킬 수 있는 일반적인 애니메이션 효과입니다. 다음은 WeChat 애플릿에서 카드 뒤집기 효과를 구현하는 방법을 자세히 소개하고 관련 코드 예제를 제공합니다. 먼저, 미니 프로그램의 페이지 레이아웃 파일에 두 개의 카드 요소를 정의해야 합니다. 하나는 앞면 내용을 표시하기 위한 것이고 다른 하나는 뒷면 내용을 표시하기 위한 것입니다. &lt;--index.wxml- -&gt;&l

Alipay, 희귀 문자 라이브러리를 수집하고 보완하는 '한자 따기-희귀 문자' 미니 프로그램 출시 Alipay, 희귀 문자 라이브러리를 수집하고 보완하는 '한자 따기-희귀 문자' 미니 프로그램 출시 Oct 31, 2023 pm 09:25 PM

10월 31일 이 사이트의 소식에 따르면 올해 5월 27일 Ant Group은 '한자 선택 프로젝트'를 시작한다고 발표했으며 최근 새로운 진전을 보였습니다. Alipay는 '한자 선택 - 흔하지 않은 문자' 미니 프로그램을 출시했습니다. 희귀 캐릭터는 희귀 캐릭터 라이브러리를 보완하고 희귀 캐릭터에 대한 다양한 입력 경험을 제공하여 Alipay의 희귀 캐릭터 입력 방법을 개선하는 데 도움을 줍니다. 현재 사용자는 "한자픽업", "희귀문자" 등의 키워드를 검색하여 "특수문자" 애플릿에 진입할 수 있습니다. 미니 프로그램에서 사용자는 시스템에서 인식 및 입력되지 않은 희귀 문자의 사진을 제출할 수 있으며 확인 후 Alipay 엔지니어가 글꼴 라이브러리에 추가 항목을 작성합니다. 이 웹사이트에서는 미니 프로그램에서도 최신 문자 분할 입력 방식을 경험할 수 있다고 밝혔습니다. 이 입력 방식은 발음이 불분명한 희귀 문자를 위해 설계되었습니다. 사용자 해체

uniapp이 미니 프로그램과 H5 간의 빠른 전환을 달성하는 방법 uniapp이 미니 프로그램과 H5 간의 빠른 전환을 달성하는 방법 Oct 20, 2023 pm 02:12 PM

유니앱이 미니 프로그램과 H5 사이를 빠르게 전환하려면 구체적인 코드 예제가 필요합니다. 최근 모바일 인터넷의 발전과 스마트폰의 대중화로 인해 미니 프로그램과 H5는 필수 애플리케이션 형태가 되었습니다. 크로스 플랫폼 개발 프레임워크인 uniapp은 코드 세트를 기반으로 작은 프로그램과 H5 간의 변환을 신속하게 실현하여 개발 효율성을 크게 향상시킬 수 있습니다. 이 기사에서는 uniapp이 미니 프로그램과 H5 간의 신속한 변환을 달성하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 유니앱 유니아 소개

Python으로 간단한 채팅 프로그램 작성 튜토리얼 Python으로 간단한 채팅 프로그램 작성 튜토리얼 May 08, 2023 pm 06:37 PM

구현 아이디어 x01 서버 구축 먼저, 서버 측에서는 소켓을 사용하여 메시지를 수락합니다. 소켓 요청이 수락될 때마다 새 스레드가 열려 메시지 배포 및 수락을 관리합니다. 모든 스레드를 관리하여 채팅방의 다양한 기능 처리를 실현합니다. x02 클라이언트의 설정은 서버보다 훨씬 간단합니다. 클라이언트의 기능은 메시지를 보내고 받는 것뿐이며 특정 문자를 입력하는 것뿐입니다. 따라서 다양한 기능을 사용하려면 클라이언트 측에서 두 개의 스레드만 사용해야 합니다. 하나는 메시지 수신 전용이고 다른 하나는 메시지 전송 전용입니다. 왜냐하면, 오직

위챗 미니 프로그램 회원가입 방법 위챗 미니 프로그램 회원가입 방법 May 07, 2024 am 10:24 AM

1. WeChat 미니 프로그램을 열고 해당 미니 프로그램 페이지로 들어갑니다. 2. 미니 프로그램 페이지에서 회원 관련 입구를 찾으세요. 일반적으로 회원 입구는 하단 네비게이션 바 또는 개인 센터에 있습니다. 3. 멤버십 포털을 클릭하여 멤버십 신청 페이지로 이동합니다. 4. 회원가입신청 페이지에서 휴대폰번호, 이름 등 관련 정보를 입력하신 후, 가입신청을 해주세요. 5. 미니 프로그램은 회원 가입 신청서를 검토한 후, 사용자는 위챗 미니 프로그램의 회원이 될 수 있습니다. 6. 이용자는 회원이 되면 포인트, 쿠폰, 회원전용 이벤트 등 더 많은 회원권을 누릴 수 있습니다.

미니프로그램 등록 조작방법 미니프로그램 등록 조작방법 Sep 13, 2023 pm 04:36 PM

미니 프로그램 등록 작업 단계: 1. 개인 ID 카드, 기업 사업자 등록증, 법인 ID 카드 및 기타 제출 자료 사본을 준비합니다. 2. 미니 프로그램 관리 배경에 로그인합니다. 4. "기본 설정"을 선택합니다. 5. 제출 정보를 입력합니다. 6. 제출 자료를 업로드합니다. 7. 제출 신청서를 제출합니다. 8. 심사 결과를 기다립니다. 제출이 통과되지 않은 경우 사유에 따라 수정합니다. 9. 제출에 대한 후속 작업은 다음과 같습니다.

See all articles