2017-01-19 13 views
0

私は2つのプロセスを持つアプリを持っています。アクティビティが作成されると、2番目のプロセスが開始されます。マニフェストでその活動の抜粋の下に検索:「:anotherprocess」私はしかし、コード内で、ADBを通じて、何とかメインプロセスをkillする必要が開始した後Androidアプリのバックグラウンドプロセスを強制終了するにはどうすればよいですか?

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

私はDDMSで "Terminate Application"を試みましたが、メインプロセスは強制終了されましたが、数秒後に再作成されました。

私はこのコードを試してみた:

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

をしかしメインプロセスは、わずか数秒後に再作成されるように殺されます。

更新日: 上記のコードは機能します。他のプロセスでアクティビティを開始してから数秒後に呼びかけていましたが、メインプロセスを終了する前に他のプロセスが完全に開始されていないようです。今、私は他のプロセスからメインプロセスを殺しています。これは今動作します。皆さんありがとう!

+0

試しましたか? android.os.Process.killProcess(android.os.Process.myPid()); – Alan

+0

@dalmendrayバックグラウンドプロセスを強制終了したいのはなぜですか? –

+0

@Charuka Androidがそれをするときにシミュレートするために、メインプロセスを終了する必要があります。メインプロセスが強制終了されるという事実に基づいてテストする必要があるコードでプロセス間通信がある(Androidにもっとリソースが必要な場合など) – 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

関連する問題