Android Basic 4대 구성 요소 상세 정보

25231 단어
Android 4대 어셈블리 상세 정보
    
         Android      ,    JavaSE  , Android  ,        ,       
   android  ,                  (    ),             。
 
  
         Activity,Service,BroadCastReceiver,ContentProvider, android      ,
      android             。
 1.Activity    
      Activity  ,activity                 ,  Android ,
   activity         ,      android           ,    Activity
   Activity         ,            ,                   
              ,          (      ).        
   FragmentActivitiyListActivity ,PreferenceActivity ,TabAcitivty … 
          Activity       ,  activity           ,      ,  ,  ,  
        .Activity           ,                       onCreate(),
    onStart(),onPause(),onResume(),onstop(),onDestroy(), onRestart()   .(    )。
    
             onCreat()  ,        :                   ,  
        ,                ,(     ),          ,       
                   ,     view(setCountentView(view)),     findViewById(id),
           oncreate       ,  Activity       ,    onStart()   ,     
  onStop()    。           。
        onResume()  ,            ,         ,      ,        ? 
      ,    ,activity        。
        onPause()   onResume()    , activity        ,activity    ,    view
        
       onStop()  , activity      ,      ,    activity      activity ,  
    activity     activity  ,    onStop()    
       onRestart()  ,    activity      activity,       activity ,        
       onDestroy()  ,   activity           , onCreate()  。
 
         ,           ,onCreate   onDestroy  ;onStart   onStop   ;
     onResume   (     ) onPause(    )。
   
 
   
横竖屏切换生命周期比较特殊,不同activity跳转,而是销毁当前activity并重新创建
在Androidmainfest清单文件中声明android:screenOrientation="portrait"属性可以限制不可横竖屏 切换。
      
        Demo,
 
  
public class MainActivity extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("onCreate--------------------");
	}


	//            TestActivity
	public void click(View v) {
		Intent intent = new Intent(this,TestActivity.class);
		startActivity(intent);
	}
	
	// Activity       
	@Override
	protected void onDestroy() {
		System.out.println("onDestroy--------------------");
		super.onDestroy();
	}
	
	//          
	@Override
	protected void onStart() {
		System.out.println("onStart--------------------");
		super.onStart();
	}
	
	// Activity      
	@Override
	protected void onStop() {
		System.out.println("onStop--------------------");
		super.onStop();
	}
	// Activity                
	@Override
	protected void onResume() {
		System.out.println("onResume--------------------");
		super.onResume();
	}
	
	// acctivity               
	@Override
	protected void onPause() {
		System.out.println("onPause--------------------");
		super.onPause();
	}
	
	//       
	@Override
	protected void onRestart() {
		System.out.println("onRestart--------------------");
		super.onRestart();
	}
	
}
 
  
 
 
            ,         Activity       

[1] 표준표준표준표준, 대부분의 응용은 이 표준 시작 모델이다. 
  
[2]singleTop 단일 상단 모드에서Activity를singleTop 시작 모드로 설정할 때 이걸 켜면
Activity 때 현재 작업 스택을 확인합니다.
창고 꼭대기
이 실례가 존재하는지,
존재하면 새로운 실례를 만들지 않고 직접
장면을 적용하려면 이 인스턴스를 재사용합니다.
singleTop
: 브라우저 책갈피 페이지
 
 
[3]singleTask Activity를singleTask 시작 모드로 설정하면 현재 작업 창고가 실례적으로 열려 있는지 확인합니다.
실례가 열리면 이 실례를 다시 사용하고,
또한 이 인스턴스 위에 있는 다른 Activity도 비워집니다. 현재 작업 스택은
하나의 실례가 존재하다
응용 장면:singeTask:브라우저가 탐색하는 페이지의 메모리 절약
[4]singleinstance: 이 부팅 모드를 Activity로 설정하면 이 Activity에 작업 창고를 따로 생성합니다.
이 Activity는 자신의 작업 스택에 있습니다.
응용 장면singleInstance: 전보 페이지 판매
 

                  Activity     ,     ,     standard  activity
        android:launchMode="singleInstance"
            >
      
        Activity      .
       2.Service
        Android                             Activity,Android      
                 (   ),               ,       。
           5 :
           1.Foreground process     ,           Activity   onResume         
          
           2.Visible Process       ,       ,         ,   Activity   onPause()  。
          
           3.Service Process        ,        startService      ,       
          
           4. Background Process       ,    Activity   onStop()  。
          
           5. Empty  Process                        ,         ,   
        
                       ,            ,              。

 StartService()   BindService().
         starService       ,   onCreate()  , onStart()  ,        ,    onStart()  。
          ,         ,         ,           
         startService                 ,                onCreate().onstartCommand(), service       onDestroy()  。

              
bindService 오픈 서비스는 바인딩 모드 오픈 서비스라고도 하는데 생명주기가 처음 실행되는 방법으로는 onCreate(), onBind() 방법이 있습니다.
삭제할 때 onUnBind (), onDestroy () 방법을 실행합니다.bindService가 서비스를 시작하는 특징은 인터페이스를 설정할 때 찾을 수 없기 때문에 설정 인터페이스에서 수동으로 삭제할 수 없습니다.
그러나 그의 생명주기는Activity에 의존하여Activity가 소각될 때 이 서비스도 따라서 소각된다.
상기 두 가지 생명주기가 상대적으로 단순한 모델에서의 경우 우리는 개발하는 과정에서 서비스 실례가 하나만 있다는 것을 주의해야 한다. 즉, 현재 시작할 서비스가 이미 존재한다면 이 서비스를 다시 만들지 않을 것이다. 물론 onCreate() 방법을 사용하지 않을 것이다.
하나의 서비스는 여러 고객에게 귀속될 수 있습니다. 모든 귀속 대상이 onBind () 방법을 실행한 후에만 이 서비스는 삭제됩니다. 단, 한 사용자가 onStart () 방법을 실행했다면, 이 때 다른 모든 bind 고객이 unBind () 를 실행했다면.
이 서비스도 소각되지 않습니다. 많은 응용 프로그램이 start 서비스와bind 서비스로 혼합하여 서비스를 시작합니다. 예를 들어 음악 플레이어, 제3자 결제 등입니다.
이 때 우리는 스타트 서비스로 서비스를 시작한 이상 왜 bind 서비스로 서비스를 시작해야 하는지 의문이 생길 수 있다.
목적은 바로 bindserivce를 사용하여 서비스 안의 방법을 호출하기 위한 것이다
프로세스 간 통신 문제 해결: IPC,
IPC를 사용하려면aidl을 사용해야 합니다.
aidl: Android inteface defation language Android 인터페이스 정의 언어
aidl 언어를 사용하려면
[1] 하나의 서비스 서비스 안에 방법이 있는데 이 방법은 다른 응용 프로그램에서 호출된다.
 
[2] 서비스 내부에서 중개인 대상을 정의한다(Ibinder의 실례)
[3] onbind 방법에서 우리가 정의한 중간자 대상을 되돌려줍니다.
[4] 네가 폭로하고 싶은 방법을 인터페이스에 정의한다.
[5] 정의된 인터페이스 I 서비스.java 파일이aidl 파일로 바뀌었습니다.
[6] 시스템은 자동으로 하나의 I서비스를 생산한다.java 파일에서 클래스stub 시스템을 생산하면 오류가 발생합니다.우리가 정의한 중간자 대상을 직접
상속Stub
[7] 두 응용 프로그램이 같은 aidl 파일을 사용하는지 확인하려면 구글이 aidl 파일로 생성한 패키지 이름이 같아야 한다
[8] 중간자 대상을 얻는 방식이 다르다는 것은stub류의 정적 방법으로 우리가 정의한 중간자 대상을 얻는 것이다
[9] 얻은 중개인 대상을 통해 서비스 안의 방법을 호출하여 IPC 통신을 실현한다.
서비스를 시작하는 두 가지 작은 Demo:
 public class MainActivity extends Activity {

	private MyConn conn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}

	//         
	public void click1(View v) {
		Intent intent = new Intent(this, FirstService.class);
		startService(intent);
	}

	//         
	public void click2(View v) {
		Intent intent = new Intent(this, FirstService.class);
		stopService(intent);
	}

	//       bindservice      
	public void click3(View v) {
		
		Intent intent = new Intent(this, FirstService.class);
		conn = new MyConn();
		bindService(intent, conn, BIND_AUTO_CREATE);
		
	}
	
	//          
	public void click4(View v) {
		Intent intent = new Intent(this, FirstService.class);
		stopService(intent);
	}
	
	 // Activity      
	@Override
	protected void onDestroy() {
		//       
		unbindService(conn);
		super.onDestroy();
	}
	
	//        
	private class MyConn implements ServiceConnection{

		//            
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			
		}

		//         
		@Override
		public void onServiceDisconnected(ComponentName name) {
			
		}
		
	}
}
 
  
public class FirstService extends Service {
	//   bindservice          
	@Override
	public IBinder onBind(Intent intent) {
		
		System.out.println("onBind");
		return null;
	}

	// service          
	@Override
	public void onCreate() {
		System.out.println("onCreate");
		super.onCreate();
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		
		System.out.println("onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}
	

	@Override
	public void onDestroy() {
		System.out.println("onDestroy");
		super.onDestroy();
	}
}
 
  
 
  
 
  

 3.BroadCastReceiver  

                                                    

      BroadCastReceiver Android , app

      :

      : Android Binder

      :sendBroadcast() , 。 , ,

          :sendOrderedBroadcast()            ,        ,          A,B,C,     A>B>C,
               ,        A,   B,     C,            ,  B    ,C      ,
         A                 ,     B ,B          A     。

context를 통해서.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,initialCode, initialData, initialExtras);ResultReceiver 방송 수신자를 지정할 수 있습니다.
이 수신자는 최종 수신자로 볼 수 있다. 통상적으로 그보다 우선순위가 높은 수신자가 방송을 중지하지 않으면 그의 onReceive 방법은 두 번 실행된다.
첫 번째는 정상적으로 우선순위에 따라 집행하고, 두 번째는 최종 수신자로서 수신하며, 그보다 우선순위가 높은 수신자가 방송을 종료하면 그는 여전히 방송을 받을 수 있다.
저희 프로젝트에서 방송 수신자가 시스템 알림을 받는 것을 자주 사용합니다. 예를 들어 켜기 시작, sd카드 마운트, 저전량, 외주 전화, 잠금 화면 등입니다.
만약 우리가 플레이어를 하고 있다면, 사용자가 화면을 잠그는 것을 감청한 후에, 우리는 플레이어를 잠시 멈춰야 한다.
Androidmainfest에 방송 수신자를 등록하는 것을 정적 등록, 코드에 등록하는 것을 동적 등록이라고 하는 두 가지 등록 방법이 있다.
정적 등록된 방송 수신자는 앱이 시스템에 등록되면 방송 메시지를 계속 받을 수 있다. 동적 등록된 방송 수신자는 등록된 activity나 서비스가 소각되면 그렇게 오랫동안 방송을 받지 못한다.
그래서 일반적인 응용 프로그램은 정적 등록으로 되어 있고 특히 빈번한 방송 이벤트가 안드로이드 마인페스트에 등록되어 무효입니다.
예를 들어 핸드폰 잠금 방송은 코드에서registerReceiver () 방법으로 방송을 등록할 수 있다.
주의해야 할 점:
    1.BroadcastReceiver의 생명주기는 매우 짧습니다. 방송을 받을 때 만들고onReceiver () 방법이 끝난 후에 삭제합니다
   
  2.방송 수신자 중에는 시간이 많이 걸리는 작업을 하지 마십시오. 그렇지 않으면 Application No Response (응답이 없는 anr 적용) 오류 대화상자가 뜨기 때문에 일반적으로 시간이 오래 걸리는 작업은 서비스에 맡기는 것이 좋습니다.
   
3. 가장 좋은 것은 방송 수신자 중에서 하위 라인을 만드는 데 시간을 소모하는 작업도 하지 않는 것이다. 왜냐하면 방송 수신자가 소각된 후 프로세스는 빈 프로세스가 되고 빈 프로세스는 시스템에 의해 쉽게 죽기 때문이다.     
   
Android에 브로드캐스트 메커니즘을 도입하려는 의도:
1. 프로그램 간 메시지 교환(예를 들어 자신의 응용 프로그램에서 시스템의 전보를 감청하는 경우)
2. 효율성(UDP 브로드캐스트 프로토콜의 LAN 편의성 참조)
3. 디자인 모드(반전 제어의 한 응용, 감청자 모드와 유사)
방송을 보내고 받는 작은 데모;
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	//              
	public void click(View v) {
		Intent intent = new Intent();
		//         
		intent.setAction("com.itcast.customreceiver");
		intent.putExtra("name", "    7     ~~");
		//    
		sendBroadcast(intent);
		
	}
	
}
public class ReceiveCusomReceiver extends BroadcastReceiver {

	
	//                 
	@Override
	public void onReceive(Context context, Intent intent) {

		//    
		abortBroadcast();
		
		String name = intent.getStringExtra("name");
		Toast.makeText(context, name, 0).show();
		
	}

}




4.ContentProvider  

   ContentProvider

      Android ( ) , ContentProvider 。

  ContentProvider , ContentProvider, query,insert,updata,delete 。

, AndroidMainfest

public class OtherActivity extends ContentProvider {

	@Override
	public boolean onCreate() {
		
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		return null;
	}

	@Override
	public String getType(Uri uri) {
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		return null;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}
}

AndroidMainfest :         

  

ContentResolver Provider, ContentObserver,

 
  
 
          Android     Activity,Service,BroadCastReceiver,ContentProvider?
                          web   MVC  ,          ,                          MVC  ,
                         ,           。
      
     
                    ,        ,    ,        ,    android         !
         
 
 

좋은 웹페이지 즐겨찾기