어떻게 하면 안드로이드 응용 프로그램을 활성화시킬 수 있습니까?
9510 단어 안드로이드 학습
구성 요소 요소activity, 서비스,receiver,provider, 모두 하나의 프로세스 속성으로 구성 요소가 어느 프로세스에서 실행되는지 지정할 수 있습니다.이 속성은 모든 구성 요소가 자신의 프로세스에서 실행되거나, 프로세스의 이름이 다른 구성 요소와 하나의 프로세스를 공유하도록 설정할 수 있습니다.
스레드(Thread): 냉각 라인, 프로세스(process): 작업장, 응용프로그램: 플랜트
루틴은 하나의 유수선과 같다. 우리가 네트워크 연결이나 데이터베이스 요청 같은 시간 소모 조작을 실행하면 이 루틴이 막힐 수 있다.또한 기본 스레드(UI 스레드)에서 전체 인터페이스에 응답해야 합니다.따라서 UI 스레드를 차단하지 않고 애플리케이션 성능을 향상시키려면 멀티 스레드가 필요합니다.
Android 시스템에서는 각 프로세스에 대해 메모리 제한이 있습니다.만약 한 응용 프로그램이 여러 프로세스를 할 수 있다면, 이 응용 프로그램은 더 많은 메모리를 가지고 실행할 수 있으며, 우리의 응용 메모리 제한을 확대하고 프로그램의 속도를 최적화시킬 수 있다.
2. 프로세스의 등급(프로세스의 생명주기)
하나.프로세스는 우선 순위에 따라 다른 레벨로 나뉘어져 있습니다.
A. Activity( onResume() )
B. bound Activity
C. “ ” Service(startForeground() )
D. Service(onCreate()、onStart() onDestroy())
E. onReceive() BroadcastReceiver
( , 。)
A. 、 Activity( Activity)
B. ( ) Activity Service
A. startService() , Service
A. Activity
A. , , , 。
3. 프로세스 회수 메커니즘: Low Memory Killer
4. 진행 과정의 살해 방지
:
1. Android 4.3 , Notification Notification。
2. Android 4.3 , Notification。 :
Service startForeground , ID Notification , Notification。 Service , 。 Service Service, 。
androidmanifest.xml application android:persistent="true" LMK , 。 , 。 apk /system/app 。 。
5. 피살 후 재가동
START_NOT_STICKY
onStartCommand() , Intent , 。
START_STICKY
onStartCommand() , onStartCommand() , Intent , null Intent onStartCommand() 。
, Intent 。 ( ), 。
START_REDELIVER_INTENT
onStartCommand() , , Intent onStartCommand() 。 Intent 。 , 。
이 경우 시스템을 재부팅할 수 있지만 즉시 재부팅할 수는 없습니다.또한 일부 맞춤형 ROM에서는 유효하지 않습니다.
두 개의 프로세스를 사용하여 각각 두 개의 서비스를 마운트하고 두 개의 서비스는 서로 폴링하여 깨운다. public class FirService extends Service {
public final static String TAG = "com.example.servicedemo.FirService";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
thread.start();
return START_STICKY;
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
Log.e(TAG, "FirService Run: "+System.currentTimeMillis());
boolean b = Util.isServiceWorked(FirService.this, "com.example.servicedemo.SecService");
if(!b) {
Intent service = new Intent(FirService.this, SecService.class);
startService(service);
Log.e(TAG, "Start SecService");
}
}
};
timer.schedule(task, 0, 1000);
}
});
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
--------------------------------------
public class SecService extends Service {
public final static String TAG = "com.example.servicedemo.SecService";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
thread.start();
return START_REDELIVER_INTENT;
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
Log.e(TAG, "SecService Run: " + System.currentTimeMillis());
boolean b = Util.isServiceWorked(SecService.this, "com.example.servicedemo.FirService");
if(!b) {
Intent service = new Intent(ServiceTwo.this, FirService.class);
startService(service);
}
}
};
timer.schedule(task, 0, 1000);
}
});
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
-----------------------------------
public class Util {
public static boolean isServiceWorked(Context context, String serviceName) {
ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ArrayList runningService = (ArrayList) myManager.getRunningServices(Integer.MAX_VALUE);
for (int i = 0; i < runningService.size(); i++) {
if (runningService.get(i).service.getClassName().toString().equals(serviceName)) {
return true;
}
}
return false;
}
}
?:
1. Android 3.1 , stopped 。
2. , , (stopped state)。
3. stopped , intent FLAG_INCLUDE_STOPPED_PACKAGES Flag。 , 。
4. 。
5. ROM STOPPED
-------------------
public class NotificationService extends NotificationListenerService {
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
}
}
시스템에서 어떤 응용 프로그램이 알림을 보내거나 사용자가 알림을 삭제하는 것을 발견하면 이 서비스의 상기 두 함수를 되돌려줍니다. 함수의 매개 변수인 StatusBarNotification은 이 알림의 구체적인 정보를 포함합니다.참조:
http://blog.csdn.net/aigestudio/article/details/51348408 http://www.jianshu.com/p/63aafe3c12af http://www.cnblogs.com/angeldevil/archive/2013/05/21/3090872.html …
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
안드로이드 개발의 사용자 정의 View Drawable을 통해 아이콘 그리기텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.