차례:
비디오: GOTO 2016 • Exploring RxJava 2 for Android • Jake Wharton 2024
새로운 Java 프로젝트를 시작하면 Android Studio는 프로젝트에 대한 활동을 생성합니다. Android Studio는 기본 활동, 빈 활동, 로그인 활동 등과 같은 여러 종류의 활동을 제공합니다. 빈 활동을 요청하면 다음 코드를 받게됩니다:
package com. 알리 코드. a10_11;
android. 지원하다. v7. 앱. AppCompatActivity;
android. OS. 묶음;
public class MainActivity는 AppCompatActivity를 확장합니다.
@Override
protected void onCreate (Bundle savedInstanceState) {
super. onCreate (savedInstanceState);
setContentView (레이아웃. 활동 _ 메인);
}
}
코드는
MainActivity
라는 클래스를 선언합니다. 이 이름은
MainActivity
는 Android API 라이브러리에 포함되어 있지 않습니다. 새로운 Android 프로젝트를 만들 때 만들어주는 이름입니다. (실제로는 Android Studio가 이름을 구성합니다. 새 프로젝트를 만드는 단계를 수행 할 때 이름을 수락하거나 다른 이름으로 변경합니다.)
MainActivity
클래스는 안드로이드 SDK 라이브러리, 즉
AppCompatActivity
클래스. 즉,
MainActivity
객체
는 AppCompatActivity
객체입니다.
MainActivity
객체는
AppCompatActivity
인스턴스에있는 모든 권리와 책임을 가지고 있습니다. 예를 들어
MainActivity
에는
onCreate
메서드가 있으며이 메서드는 재정의합니다.
클래스는 Android의
AppCompatActivity
클래스에서 약 460 줄의 코드를 상속합니다.이 클래스는 Android의
클래스에서 약 1,000 라인을 상속합니다. FragmentActivity
클래스는 Android 클래스의 Activity 클래스에서 약 6,700 라인을 상속합니다. 상속 된 메소드에는 getCallingActivity
,
getCallingPackage
,
getParent
,
getTitle
,
getTitleColor
,
onKeyLongPress
,
onLowMemory
,
onMenuItemSelected
,
setTitle <,
setTitleColor
,
startActivity
, 완료 및 기타 여러 가지가 있습니다. 이 모든 기능은 두 가지 간단한 단어로 상속받습니다: extend
AppCompatActivity
.
가족 관계의 용어로,
MainActivity
클래스는 Android의
활동
클래스의 자손입니다.
MainActivity
클래스는 일종의
활동
입니다.
Android의 온라인 문서에서 직접 가져온이 이미지는
AppCompatActivity
클래스에 대한이 정보를 요약합니다.
AppCompatActivity 패밀리 트리.
Android의 API 라이브러리 설명서에 쉽게 액세스 할 수 있도록 페이지를 북마크에 추가합니다.
AppCompatActivity
클래스는 서브 클래스 일뿐만 아니라
AppCompatCallback
인터페이스,
TaskStackBuilder
인터페이스 및 기타 인터페이스를 포함하여 많은 인터페이스를 구현합니다. 이것들을 기억할 필요는 없습니다. 당신이 그것을 알아야 할 필요가 있다면, 당신은 안드로이드의 문서 페이지에서 그것을 찾을 수 있습니다.
Java의 슈퍼 키워드, revisited
super
수퍼
키워드를 다른 방식으로 사용했습니다. 예,
super
는 항상 클래스의 부모 클래스와 관련이 있습니다. 하지만,
super
는 항상 부모 클래스의 생성자를 참조하지 않습니다.
onCreate
메서드에서
super 호출. onCreate (savedInstanceState)
는
savedInstanceState
를 부모 클래스의
onCreate
메소드에 보냅니다. 부모 클래스는
AppCompatActivity
클래스입니다. 그래서 Java는
AppCompatActivit
y 클래스의
onCreate
메소드를 호출합니다.
AppCompatActivity
클래스의
onCreat
메소드에는
super에 대한 자체 호출이 포함되어 있습니다. onCreate (savedInstanceState)
.
AppCompatActivity
클래스의 부모는
FragmentActivity
클래스입니다. 따라서 Java는
FragmentActivity
클래스의
onCreate
메소드에
savedInstanceState
를 전달합니다. 등등.
Activity
클래스 - M
ainActivity
클래스의 증조모 -가 코드에서
savedInstanceState
변수를 직접 사용한다는 것은 아닙니다. 이
savedInstanceState
정보에서 코드는 시스템이 정보를 파괴하기 전의 상태로 되돌립니다.
다시 캐스팅,
findViewById
를 호출하면 Java는 어떤 종류의 뷰를 찾을 수 있는지 알지 못합니다.
findViewById
메서드는 항상
View
인스턴스를 반환하지만 많은 Android 클래스가
View
클래스를 확장합니다. 예를 들어,
Button
,
TextView
,
ImageView
,
CheckBox
,
크로노 미터
및
모두 Android의
보기
클래스를 확장합니다. 다음 코드를 입력하면
// Do not do this this! !
TextView textView;
textView = findViewById (텍스트 ID보기);
findViewById
호출에 의해 반환 된 객체가
TextView
클래스의 인스턴스를 참조한다고 가정하면 감히 상상을 초월합니다. "(실제로 Java는 Android Studio의 편집기에서
호환되지 않는 유형
오류 메시지를 조용하고 기계적으로 표시합니다.)
Narrowing
은
long
값을 > int
값.
long
값은 64 비트이고
int
값은 32 비트 만 있습니다. 그래서 좁히기위한 시도는 실패합니다. 여기에있는 코드에서 findViewById
호출이 잘못되면
TextView
변수에 대한 메서드 호출에 의해 반환 된
View 값을 할당하는 다른 시도가 있습니다. TextView
클래스는 View
클래스의 하위 클래스이므로 할당이 비참하게 실패합니다.
캐스팅 연산자를 코드에 추가하여 Java 신을 달래줍니다.
findViewById
메소드 호출에서 나오는 팝업을
TextView
객체로 변환하도록 Java에 지시합니다.
textView =
(TextView)
findViewById (R. id. textView1);
코드를 입력하는 동안 자바는 당신을 유머러스하게 말합니다. "주조 운영자는
TextView
와 이전
View
사이의 차이점을 알고 있음을 보여줍니다.. 나는 런타임에
TextView
객체로 찾은
View
객체를 해석하기 위해 최선을 다할 것입니다. "실제로 코드를 입력하는 동안 Java는 아무 것도 말하지 않습니다.이 캐스팅 트릭을 사용할 때 자바가 오류 메시지를 표시하지 않는다는 사실은 좋은 신호입니다. Java의 캐스팅 기능으로 하루를 절약 할 수 있습니다!)
캐스팅 코드를 개발하는 동안 오류 메시지가 표시되지 않도록합니다. 이러한 방식으로, 캐스팅은 Java의 유용한 기능입니다. 그러나 코드에 런타임 오류가 포함되어 있으면 캐스팅으로 인해 사용자를 저장할 수 없습니다.
textView = (TextView)를 입력하면 findViewById (R. id. textView1);
이름이
textView
가
TextView 위젯임을 나타냅니다. 앱이 실행되면 Java가 R을 포착합니다. 신분증.
activity_main의 textView
위젯. xml
파일을 사용하면 모든 것이 잘 동작합니다. 그러나 때때로
R을 확인하는 것을 잊을 수도 있습니다. java
이름을 XML 파일의 구성 요소와 비교합니다.
findViewById
호출은 놀랍게도
TextView
위젯을 예상하도록 Java에 알려주면
Button
구성 요소를 뱉어냅니다. 이 경우 캐스팅 운영자의 자바 초크와 앱 실행 중 충돌이 발생합니다. 드로잉 보드로 돌아 가기!