android 서비스(서비스) 개발

6525 단어
1. start 서비스 방식으로 시작하는 서비스: (백엔드 처리 작업) intent를 통해 파라미터를 전달할 수 있지만 Activity와 상호작용할 수 없습니다.
서비스는 스스로 시작할 수 없습니다. 다른 프로그램을 통해 호출해야 시작할 수 있습니다.
필요한 처리를 위해 서비스 애플리케이션을 시작합니다.
1. 등록 서비스: <서비스 android:name=".Local Service">/Local Service: 서비스의 클래스 이름
2. 서비스 시작: start Service(new Intent(MainActivity.this, Local Service.class).//여기에서 intent를 통해 서비스에 파라미터를 전달할 수 있습니다.이러한 방식으로 시작된 서비스는 Activity가 제거되었을 때 실행에 영향을 주지 않으며, 이 때 백그라운드에서 계속 작동합니다.StopService (Intent 서비스) 방법을 호출할 때나 시스템 자원이 매우 부족할 때까지 이 서비스는 onDestory () 방법을 호출해서 실행을 중지합니다.
3. 서비스 중지: stop 서비스(new Intent(MainActivity.this, Local Service.class).
서비스 처리:
1. onCreate(): 서비스가 생성될 때 이 방법을 호출합니다.
2. onStartCommand(Intent intent, int flags, int startId): start Service 방법으로 서비스를 시작할 때 호출되며 Intent를 통해 응용 프로그램에서 전송된 파라미터를 얻을 수 있습니다.
3. onDestroy (): 서비스가 stop 서비스를 통해 정지될 때 호출됩니다.
2. bindService를 통해 시작되는 서비스(로컬 프로세스에서 Activity와 상호작용)
귀속 서비스 응용 프로그램의 처리:
1. 등록 서비스: <서비스 android:name=".Local Service">/Local Service: 서비스의 클래스 이름
2. 서비스 연결 감청기를 만든다.
//는 서비스 연결 감청기를 설치하고,목적: 서비스가 귀속되고 정지될 때private Service Connection mConnection = new Service Connection () {public void on Service Connected (Component Name className, Ibinder 서비스){//서비스가 연결될 때 호출되고 서비스의binder 인터페이스를 얻을 수 있으며 서비스가binder 인터페이스에 정의된 함수 iService=(IS서비스) 서비스, 서비스.getName()를 호출할 수 있습니다. }
        public void onServiceDisconnected(ComponentName className)
{//서비스가 정지되었을 때 처리를 합니다};
3. 바인딩 방식으로 서비스를 시작합니다. bindService(Intent 서비스, Service Connection conn, int flags)//서비스 연결기 대상을 전달합니다.
4, 서비스 중지: unbindService(ServiceConnection mConnection)//어떤 커넥터가 시작되는 서비스를 중지할지 지정합니다.
서버 프로세싱:
1. onCreate(): 서비스가 생성될 때 이 방법을 호출합니다.
2. 서비스 내 정의binder 인터페이스: 인터페이스 내 서비스가 이 서비스 클라이언트를 연결하여 호출하는 방법을 제공한다.
   public class MyBind extends Binder implements IService{            public String getName() {   return "name";  }}
3. 서비스 인터페이스 구성:private MyBind myBind = new MyBind (); 
4. 바인딩 이벤트 호출:bindService에서 호출하고 클라이언트 서버 인터페이스에 되돌려줍니다
public IBinder onBind(Intent arg0)  {  return myBind; }
5. onUnbind(Intent intent): 클라이언트 unbind Service에서 호출됩니다.
전체 프로그램의 운행 과정은 다음과 같다. 사용자가 귀속 서비스 단추를 눌렀을 때Activity가bindService () 방법을 호출한 다음에 시스템은onCreate를 호출하여 서비스를 만들고 시스템은onBind () 방법을 계속 호출하여Activity에 Ibinder 형식의 대상을 전달한다.Activity의 서비스 커넥션에 전달된 온 서비스 커넥티드 (ComponentName name, Ibinder 서비스) 의 두 번째 인자입니다. 이 인자를 통해 IS 서비스를 얻을 수 있습니다.로컬 Activity 및 Service 상호 작용을 수행합니다.
특히 설명: 상기 두 가지 방법은 모두 같은 프로세스에서 진행되고 서비스는 클라이언트 응용 프로그램과 함께 포장해야 한다.크로스 프로세스의 통신을 실현하려면 아래의 방식을 사용해야 한다
3. AIDL 방식의 서비스(Android Interface Definition Language) AIDL(Android Interface Definition Language) IPC 메커니즘은 대상을 대상으로 하는 경량급이다.AIDL에서 정의한 인터페이스를 통해 서버와 클라이언트의 IPC 통신이 가능합니다.
AIDL 및 서버 작성:
1. Eclipse에서 안드로이드 프로젝트를 만들고 activity를 만들지 않기
2. 프로젝트의 src 폴더에 패키지의 폴더를 만들고 폴더에aidl이라는 확장자를 가진 파일을 만듭니다.
package com.thtf.svraidl;
interface IMyService { String getValue(); }
3. eclipse의 ADT는 자동으로 IMy 서비스를 생성합니다.java 파일.
4. My 서비스 클래스를 작성합니다.My Service는 Service의 하위 클래스로, My Service 클래스에 내장 클래스(My Service Impl)가 정의되어 있으며, 이 클래스는 IMy Service입니다.Stub의 하위 클래스입니다.MyService 클래스의 코드는 다음과 같습니다.
public class My Service extends Service {public class My Service Impl extends IMy Service. Stub {public String getValue () throws RemoteException {return "aidl 서비스 방법"        }      }
    public IBinder onBind(Intent intent)    {       return new MyServiceImpl();    }
}
설명: 위 코드를 작성할 때 다음 두 가지를 주의해야 합니다: IMyService.Stub은 IMy Service를 기반으로 합니다.aidl 파일이 자동으로 생성됩니다. 일반적으로 이런 종류의 내용을 관리할 필요가 없습니다. IMy 서비스에 계승된 것만 작성하면 됩니다.Stub 클래스의 하위 클래스(MyServiceImpl 클래스)만 사용할 수 있습니다.onBind 방법은 My 서비스 Impl 클래스의 대상 실례를 되돌려야 합니다. 그렇지 않으면 클라이언트가 서비스 대상을 얻을 수 없습니다.5、안드로이드 매니페스트에서.MyService 클래스는 xml 파일에서 다음과 같은 코드로 구성됩니다.

주의: 액션의 가방 이름과 인터페이스 이름을 잘못 쓰지 마십시오.
클라이언트 작성:
1、Eclipse 안드로이드 프로젝트 (svraidlclient)를 새로 만들고 자동으로 생성되는 IMy 서비스입니다.java 파일은 패키지 디렉터리와 함께 프로젝트의 src 디렉터리로 복사됩니다
2、AISL 인터페이스 가져오기:import com.thtf.svraidl.IMyService.
3. 서비스 연결을 만들고 서비스 연결을 할 때 서비스 대상을 얻는다.
private IMyService myService = null;
private ServiceConnection serviceConnection = new ServiceConnection()
{        public void onServiceConnected(ComponentName name, IBinder service)
{//서비스 객체 my Service 획득 = IMy Service.Stub.asInterface(서비스),
     }
}
4. 귀속된 방식으로 서비스를 시작합니다.
//AIDL 서비스 bindService 바인딩(new Intent("com.thtf.svraidl.IMy Service"), 서비스 커넥션, Context.BIND_AUTO_CREATE);
5. 서비스를 호출하는 방법: my서비스.getValue()
4. APK 패키지 간 호출(유사한 서비스의 크로스 프로세스 통신은 매개 변수를 전달하고 결과를 얻을 수 있으나 호출 방법은 사용할 수 없음) 예를 들어 A apk는 매개 변수를 B apk에 전달하고 B가 되돌아오는 데이터를 얻는다. 이를 통해 다음과 같이 실현한다.
A apk 처리:
Intent intent = new Intent(); //        
intent.setClassName("com.thtf", "com.thtf.PermitActivity"); //         
intent.putExtra("filename", "  "); //             
startActivityForResult(intent, 0);	//      activity

//          
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
   	super.onActivityResult(requestCode, resultCode, data);   		
   	if (resultCode == RESULT_OK)//         
   	{   		 
   		 Bundle extras = data.getExtras();//             		
   	   String result = "  :" +extras.getString("retvalue");//      
   	 }
}

B apk 처리:
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    Bundle extras = getIntent().getExtras();//         
        
    if(extras != null)
    {
        String filename = extras.getString("filename");//             
        String retvalue = invokeWs(filename);//           ,        
        
        //    intent  
        Bundle bundle = new Bundle();
        bundle.putString("retvalue", retvalue);
        
        //  intent,        
        Intent intent = new Intent();
        intent.putExtras(bundle);
       
        //       intent,    
        setResult(RESULT_OK, intent);
     }
     finish();
}

좋은 웹페이지 즐겨찾기