Android 응용 개발 에서 Activity 류 의 용법 을 전면적으로 분석 합 니 다.
1.java.lang.Object
2.android.content.Context
3.android.app.ApplicationContext
4.android.app.Activity
activity 는 단독 으로 사용자 작업 을 처리 하 는 데 사 용 됩 니 다.거의 모든 activity 가 사용자 와 접촉 해 야 하기 때문에 activity 류 는 창 을 만 들 었 습 니 다.개발 자 는 setContentView(View)인 터 페 이 스 를 통 해 UI 를 activity 가 만 든 창 에 놓 을 수 있 습 니 다.activity 가 전체 화면 창 을 가리 킬 때 다른 방식 으로 도 실현 할 수 있 습 니 다.다른 activity 그룹 에 끼 워 넣 거나(Activity Group 사용).대부분의 Activity 하위 클래스 는 다음 과 같은 두 개의 인 터 페 이 스 를 실현 해 야 합 니 다.
onCreate(Bundle)인 터 페 이 스 는 activity 를 초기 화 하 는 곳 입 니 다.여기 서 는 보통 setContentView(int)가 자원 파일 에 정의 하 는 UI 를 호출 할 수 있 습 니 다.findView ById(int)를 사용 하면 UI 에서 정의 하 는 창 을 얻 을 수 있 습 니 다.
onPause()인 터 페 이 스 는 사용자 가 activity 를 떠 나 려 고 하 는 곳 입 니 다.여기 서 모든 수정 사항 이 제출 되 어야 합 니 다(일반적으로 ContentProvider 에 데 이 터 를 저장 하 는 데 사 용 됩 니 다).
Context.startActivity()를 사용 하기 위해 서 는 모든 activity 클래스 가 AndroidManifest.xml 파일 에 관련 된'activity'항목 을 정의 해 야 합 니 다.
Activity 클래스 는 Android 응용 라 이 프 사이클 의 중요 한 부분 입 니 다.다음은 Activity 의 각 포 인 트 를 구체 적 으로 정리 해 보 겠 습 니 다.
1.Activity 의 생명주기
2.Activity 간 에 데 이 터 를 전달 합 니 다.
1.Intent 를 통 해 데이터 전달
Intent.putExtra 방법 을 통 해 간단 한 데이터 형식 이나 직렬 화 가능 한 대상 을 Intent 대상 에 저장 한 다음 다른 Activity 에서 getInt,getString 등 방법 으로 이 데 이 터 를 얻 을 수 있 습 니 다.예제 코드 는 다음 과 같다.
Intent intent =new Intent(CurrentActivity.this,OtherActivity.class);
// “ ” email
Bundle bundle =new Bundle();// email
bundle.putBoolean("boolean_key", true);//
bundle.putString("string_key", "string_value");
intent.putExtra("key", bundle);// email
startActivity(intent);// Activity
다음은 데이터 가 져 오기:
Intent intent =getIntent();// email
Bundle bundle =intent.getBundleExtra("key");// email
bundle.getBoolean("boolean_key");//
bundle.getString("string_key");
그러나 Bundle 을 사용 하여 데 이 터 를 전달 하 는 것 은 조금 번 거 롭 습 니 다.만약 에 한 가지 유형의 값 만 전달 하면 이렇게 할 수 있 습 니 다.
Intent intent =new Intent(EX06.this,OtherActivity.class);
intent.putExtra("boolean_key", true);
intent.putExtra("string_key", "string_value");
startActivity(intent);
데이터 가 져 오기:
Intent intent=getIntent();
intent.getBooleanExtra("boolean_key",false);
intent.getStringExtra("string_key");
2.정적 변 수 를 통 해 데이터 전달직렬 화 되 지 않 고 간단 한 대상 에 적용 되 지만 정적 코드 블록 을 사용 하 는 것 은 추천 하지 않 습 니 다.
public class MainActivity extends Activity {
private Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btOpenOtherActivity);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
// OtherActivity
OtherActivity.name = "wulianghuan";
OtherActivity.age = "22";
OtherActivity.address = " ";
startActivity(intent);
}
});
}
}
public class OtherActivity extends Activity {
public static String name;
public static String age;
public static String address;
private TextView text_name;
private TextView text_age;
private TextView text_address;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
text_name = (TextView) findViewById(R.id.name);
text_age = (TextView) findViewById(R.id.age);
text_address = (TextView) findViewById(R.id.address);
//
text_name.setText(" :"+name);
text_age.setText(" :"+age);
text_address.setText(" :"+address);
}
}
3.전역 대상 을 통 해 데이터 전달프로그램 이 수시로 호출 할 수 있 도록 일부 데 이 터 를 오래 저장 하려 면 전역 대상 을 사용 하 는 것 을 권장 합 니 다.응용 프로그램 전역 클래스 는 정적 변 수 를 정의 할 필요 가 없습니다.일반 구성원 변 수 를 정의 하면 됩 니 다.그러나 전역 클래스 에는 반드시 무 참 구조 방법 이 있어 야 합 니 다.응용 프로그램 클래스 를 작성 한 후에<응용 프로그램>탭 에서 전역 클래스 이름 을 만들어 야 합 니 다.그렇지 않 으 면 시스템 이 자동 으로 전체 대상 을 만 들 지 않 습 니 다.
public class MainApplication extends Application {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
public class MainActivity extends Activity {
private MainApplication application;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
application = (MainApplication) getApplication();
application.setUsername("sunzn");
}
public void open(View view) {
Intent intent = new Intent(this, OtherActivity.class);
startActivity(intent);
}
}
public class OtherActivity extends Activity {
private TextView tv_data;
private MainApplication application;
private String username;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
application = (MainApplication) getApplication();
username = application.getUsername();
tv_data = (TextView) findViewById(R.id.tv_data);
tv_data.setText(" Activity :" + username);
}
}
3.Activity 에서 데 이 터 를 되 돌려 줍 니 다.Activity 에서 데 이 터 를 되 돌려 주 려 면 startActivity ForResult 방법 으로 Activity 를 표시 해 야 합 니 다.
Activity 1 에서 Activity 2 로 이동:
Intent intent = new Intent();
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("string", et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0); //
Activity 2 에서 데 이 터 를 Aactivity 1 로 되 돌려 줍 니 다.
Intent intent = new Intent();
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);
Bundle bundle = new Bundle();
bundle.putInt("result", "Activity2 ");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK
AnotherActivity.this.finish();
Activity 1 에 onActivity Resault 방법 을 다시 쓰 고 데 이 터 를 받 아들 입 니 다.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode) { // ,
case RESULT_OK:
Bundle bundle =data.getExtras(); // intent bundle
String result = bundle.getInt("result");
break;
default:
break;
}
}
4.Activity 의 네 가지 생 성 모드저 희 는 프로젝트 를 개발 하 는 과정 에서 이 응용 프로그램 에서 여러 개의 Activity 구성 요소 간 의 도약 이나 다른 응용 프로그램 을 끼 워 넣 는 재 활용 가능 한 Activity 와 관련 될 것 입 니 다.예 를 들 어 우 리 는 반복 되 는 Activity 가 아 닌 원래 의 Activity 인 스 턴 스 로 이동 하고 싶 을 수도 있 습 니 다.기본 로드 모드 대신 Activity 에 특정한 로드 모드 를 설정 해 야 합 니 다.시작 모드 의 위 치 를 Manifest.xml 파일 에서 Activity 의 android:launchMode 속성 으로 설정 합 니 다.
1.표준 모드
이것 은 기본 모드 입 니 다.설정 할 필요 가 없습니다.Activity 를 활성화 할 때마다 Activity 인 스 턴 스 를 만 들 고 작업 스 택 에 넣 습 니 다.스 택 에 들 어 가 는 것 과 같 습 니 다.back 키 를 누 르 면 이전 Activity 로 돌아 가 는 것 은 스 택 을 취소 하 는 것 과 같 습 니 다.
2.singleTop 모드
작업 의 스 택 에 이 Activity 의 인 스 턴 스 가 존재 한다 면 이 인 스 턴 스(인 스 턴 스 의 onNewIntent()를 다시 사용 합 니 다.그렇지 않 으 면 새로운 인 스 턴 스 를 만 들 고 스 택 에 이 Activity 의 인 스 턴 스 가 존재 하 더 라 도 스 택 꼭대기 에 없 으 면 새로운 인 스 턴 스 를 만 듭 니 다.스 택 에서 같은 Activity 를 반복 하 는 여러 문 제 를 해결 할 수 있 습 니 다.
3.singleTask 모드
스 택 에 이 Activity 의 인 스 턴 스 가 있 으 면 이 인 스 턴 스 를 다시 사용 합 니 다(인 스 턴 스 의 onNewIntent()를 호출 합 니 다.다시 사용 할 때 이 인 스 턴 스 를 스 택 으로 되 돌려 줍 니 다.따라서 그 위 에 있 는 인 스 턴 스 는 스 택 에서 옮 겨 집 니 다.스 택 에 이 인 스 턴 스 가 존재 하지 않 으 면 새로운 인 스 턴 스 를 만들어 스 택 에 넣 습 니 다.single Task 모드 는 전체 응용 프로그램 을 종료 하 는 데 사용 할 수 있 습 니 다.주 Activity 를 SingTask 모드 로 설정 한 다음 종료 할 Activity 에서 주 Activity 로 이동 한 다음 주 Activity 의 onNewIntent 함 수 를 다시 쓰 고 함수 에 finish 를 추가 합 니 다.
4.singleInstance 모드
새 스 택 에 이 Activity 의 인 스 턴 스 를 만 들 고 여러 응용 프로그램 이 스 택 에 있 는 이 Activity 인 스 턴 스 를 공유 하도록 합 니 다.이 모드 의 Activity 인 스 턴 스 가 특정한 스 택 에 존재 하면 모든 응용 프로그램 이 이 Activity 를 다시 활성화 할 때 이 스 택 의 인 스 턴 스 를 다시 사용 합 니 다(인 스 턴 스 의 onNewIntent()를 호출 합 니 다.그 효 과 는 여러 애플 리 케 이 션 이 하나의 애플 리 케 이 션 을 공유 하 는 것 과 같 으 며,누가 이 액 티 비 티 를 활성화 하 더 라 도 같은 애플 리 케 이 션 에 들어간다.
5.Activity 현장 보존 상태
일반적으로 onPause()와 onStop()방법 을 호출 한 activity 인 스 턴 스 는 메모리 에 존재 합 니 다.activity 의 모든 정보 와 상태 데 이 터 는 사라 지지 않 습 니 다.activity 가 다시 프론트 데스크 톱 으로 돌아 가면 모든 변경 사항 이 유 지 됩 니 다.그러나 시스템 메모리 가 부족 할 때 onPause()와 onStop()방법 을 호출 한 activity 는 시스템 에 의 해 파 괴 될 수 있 습 니 다.이 때 메모리 에 이 activity 의 인 스 턴 스 대상 이 저장 되 지 않 습 니 다.나중에 이 activity 가 다시 프론트 데스크 톱 으로 돌아 가면 이전 변경 사항 이 사라 집 니 다.activity 가 죽 기 전에 모든 인 스 턴 스 를 저장 하 는 상 태 를 호출 할 수 있 습 니 다.개발 자 는 onSaveInstanceState()방법 을 다시 쓸 수 있 습 니 다.onSaveInstanceState()방법 은 Bundle 형식의 인 자 를 받 아들 일 수 있 습 니 다.개발 자 는 상태 데 이 터 를 이 Bundle 대상 에 저장 하여 이 상태 가 onCreate(Bundle)나 onRestoreInstanceState(Bundle)(들 어 오 는 Bundle 인 자 는 onSaveInstanceState 로 봉 인 된 것)에서 회복 되도록 할 수 있 습 니 다.이 방법 은 activity 가 죽 기 전에 호출 됩 니 다.이 activity 가 나중에 어느 순간 돌아 올 때 이전 상 태 를 회복 할 수 있 습 니 다.onSave InstanceState()방법 을 호출 하면,호출 은 onPause()나 onStop()방법 이전에 발생 하 며,생명주기 방법 도 아니다.
데이터베이스 에 기록 등 을 삽입 하면 지속 적 인 데 이 터 를 저장 하 는 작업 은 onPause()에 두 어야 합 니 다.onSaveInstanceState()방법 은 과도 데이터 만 저장 할 수 있 습 니 다.예 를 들 어 UI 컨트롤 의 상태,구성원 변수의 값 등 입 니 다.
public class MainActivity extends Activity {
private String temp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// savedInstanceState , savedInstanceState null
if (savedInstanceState != null) {
temp = savedInstanceState.getString("temp");
System.out.println("onCreate: temp = " + temp);
}
}
public void onRestoreInstanceState(Bundle saveInstanceState) {
super.onRestoreInstanceState( saveInstanceState);
String temp = saveInstanceState.getString("temp");
System.out.println("onResume: temp = " + temp);
}
// outState , activity onCreate onRestoreInstanceState
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("temp", temp);
}
6.Activity 에 관 한 기술1.Activity 방향 설정
android:screenOrientation="portrait">// , landscape
2.액 티 비 티 전체 화면 설정onCreate 방법 에 다음 코드 를 추가 합 니 다:
//
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//
requestWindowFeature(Window.FEATURE_NO_TITLE);
창 크기,위치,투명도 변경onCreate 방법 에 다음 코드 를 추가 합 니 다:
Window w=getWindow();
w.setBackgroundDrawableResource(resourceID);//
WindowManager.LayoutParams layoutParams = w.getAttributes();
layoutParams.height = 200;
layoutParams.width= 200;
layoutParams.gravity = Gravity.TOP;
layoutParams.x=50;// Gravity
layoutParams.y=50;
layoutParams.alpha = 0.5;//0: ,1:
w.setAttributes(layoutParams);
3.모든 창 닫 기
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // FLAG
startActivity(intent)
다른 방법:호출 종료 방법 에 Myapplication.getInstance().exit()를 쓰 십시오.
public class MyApplication extends Application {
private List<Activity> activityList = new LinkedList<Activity>();
private static MyApplication instance;
private MyApplication() {
}
// MyApplication
public static MyApplication getInstance() {
if (null == instance) {
instance = new MyApplication();
}
return instance;
}
// Activity
public void addActivity(Activity activity) {
activityList.add(activity);
}
// Activity finish
/*
* Activity onCreate Activity MyApplication
*
* MyApplication.getInstance().addActivity(this);
*
* Activity exit
*
* MyApplication.getInstance().exit();
*/
public void exit() {
for (Activity activity : activityList) {
activity.finish();
}
System.exit(0);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.