2017-01-19 7 views
0

두 가지 프로세스가있는 앱이 있습니다. 두 번째 프로세스는 활동이 생성 될 때 시작됩니다. 매니페스트에서 그 활동의 발췌를 보자 :Android 앱 백그라운드 프로세스를 중지하는 방법은 무엇입니까?

<activity 
     android:name=".ActivityInAnotherProcess" 
     android:process=":anotherprocess" 
     android:launchMode="singleTask" 
     ... 

을 한 후 "anotherprocess"나는 그러나, 코드, 아시아 개발 은행을 통해, 어떻게 든 주요 프로세스를 종료 할 필요가 시작됩니다.

DDMS에서 "응용 프로그램 종료"를 시도했지만 주 프로세스가 종료되었지만 몇 초 후에 다시 작성되었습니다.

나는이 코드를 시도했다 :

String packageName = c.getPackageName(); 
ActivityManager activityManager = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE); 
activityManager.killBackgroundProcesses(packageName); 

을하지만 주요 과정은 단 몇 초 후에 다시 만들어야 살해된다.

업데이트 : 위 코드는 작동합니다. 나는 다른 프로세스에서 Activity를 시작한 후 몇 초를 기다리고 있었지만, 주 프로세스를 죽이기 전에 다른 프로세스가 완전히 시작되지 않은 것처럼 보입니다. 이제 다른 프로세스에서 주요 프로세스를 종료합니다. 이 지금 작동합니다. 모두에게 감사드립니다!

+0

시도해 보셨습니까? android.os.Process.killProcess (android.os.Process.myPid()); – Alan

+0

@dalmendray 왜 백그라운드 프로세스를 죽이고 싶습니까? –

+0

@Charuka 안드로이드가 그것을 할 때 시뮬레이션을위한 주 프로세스를 죽일 필요가있다. 메인 프로세스가 죽었다는 사실을 기반으로 테스트해야하는 코드 내 프로세스 간 통신이 있습니다 (안드로이드가 더 많은 리소스를 필요로 할 수 있기 때문에) – dalmendray

답변

0
List<ApplicationInfo> packages; 
PackageManager pm; 
pm = getPackageManager(); 
packages = pm.getInstalledApplications(0); 

ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); 


for (ApplicationInfo packageInfo : packages) { 
    if((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM)==1)continue; 
    if(packageInfo.packageName.equals("mypackage")) continue; 
    mActivityManager.restartPackage(packageInfo.packageName); 
} 

경우 API> = 8 사용 mActivityManager.killBackgroundProcesses (문자열 여기서 packageName)

경우 API < 8 사용 mActivityManager.restartPackage (packageInfo.packageName);

+0

패키지 이름을 알고 있다면 for 루프를 사용하는 이유는 무엇입니까? mActivityManager.killBackgroundProcesses ("mypackage")를 호출하는 것이 좋습니다. – dalmendray