AliasActivity와의 작별

6335 단어 android
Google은 Android에서 더 이상 사용하지 않는 습관을 만들었습니다. API 레벨 30은 AliasActivity과 작별을 고해야 할 때였습니다. 잠깐, 그 수업에 대해 몰랐습니까? 안심하세요. 혼자가 아닙니다. 😎 지금은 사라졌지만(글쎄, 일종의, 확실히 여전히 코드베이스에 있습니다), 어떻게 사용되었는지 살펴보겠습니다. 그리고, 지금 하는 일.

API 레벨 1부터 있었던 클래스의 아이디어는

another activity (and then finishes itself) based on information
in its component's manifest meta-data. This is a simple way to
implement an alias-like mechanism. To use this activity, you
should include in the manifest for the associated component an
entry named android.app.alias. It is a reference to an XML
resource describing an intent that launches the real
application.



documentation을 참조하십시오.

<activity android:name=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <meta-data
    android:name="android.app.alias"
    android:resource="@xml/alias" />
</activity>


위는 매니페스트에서 해당 XML 파일을 참조한 방법입니다. 파일 자체는 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<alias xmlns:android="http://schemas.android.com/apk/res/android">
  <intent
    android:targetClass="com.thomaskuenneth.aliasactivitydemo.MainActivity2"
    android:targetPackage="com.thomaskuenneth.aliasactivitydemo" />
</alias>


별칭 활동 구현의 소스는 다음과 같이 간단할 수 있습니다.

package com.thomaskuenneth.aliasactivitydemo

import android.app.AliasActivity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AliasActivity() {
}


대신 호출되는 활동은 모든 활동입니다.

package com.thomaskuenneth.aliasactivitydemo

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity2 : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  }
}


이 작은 데모의 소스 코드는 GitHub에 있습니다.

이제 클래스가 더 이상 사용되지 않으므로 대신 무엇을 하시겠습니까? 그건 그렇고, API 레벨 1 이후로 <activity-alias> 에 포함된 매니페스트 태그 <application> 이 있습니다. 그것은 described으로

alias for an activity, named by the targetActivity attribute.
The target must be in the same application as the alias and it
must be declared before the alias in the manifest.



그래서 갖는 대신에

<activity android:name=".MainActivity">
  <intent-filter>

MainActivityAliasActivity으로 확장된 곳에서 이제 쓸 수 있습니다.

<activity-alias android:name=".MainActivity"
  android:targetActivity=".MainActivity2">
<intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>


클래스 또는 매니페스트 태그를 사용했습니까? 그렇다면 왜? 그렇지 않다면: 왜? 🤣 댓글로 여러분의 생각을 공유해주세요.

좋은 웹페이지 즐겨찾기