| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| package com.mozilla.SUTAgentAndroid.service; |
| |
| import java.util.List; |
| |
| import android.app.Activity; |
| import android.app.ActivityManager; |
| import android.content.ContextWrapper; |
| |
| public class FindProcThread extends Thread { |
| ContextWrapper contextWrapper = null; |
| String sProcNameToFind = ""; |
| boolean bFoundIt = false; |
| boolean bStillRunning = true; |
| |
| public FindProcThread(ContextWrapper ctx, String sProcessName) { |
| super("FindProcThread"); |
| this.contextWrapper = ctx; |
| this.sProcNameToFind = sProcessName; |
| this.bFoundIt = false; |
| } |
| |
| public void run() { |
| ActivityManager aMgr = (ActivityManager) contextWrapper.getSystemService(Activity.ACTIVITY_SERVICE); |
| List <ActivityManager.RunningAppProcessInfo> lProcesses; |
| int lcv = 0; |
| int nNumLoops = 0; |
| String strProcName = ""; |
| int nPID = 0; |
| |
| if (aMgr == null) |
| return; |
| |
| |
| // While we are still looping looking for the process in the list and we haven't found it |
| while (bStillRunning && !bFoundIt) { |
| lProcesses = aMgr.getRunningAppProcesses(); |
| if (lProcesses != null) { |
| for (lcv = 0; lcv < lProcesses.size(); lcv++) { |
| if (lProcesses.get(lcv).processName.contains(sProcNameToFind)) { |
| strProcName = lProcesses.get(lcv).processName; |
| nPID = lProcesses.get(lcv).pid; |
| bFoundIt = true; |
| break; |
| } |
| } |
| if (bFoundIt) // This saves you half a second of wait time if we've found it in the list |
| continue; |
| } |
| try { |
| Thread.sleep(500); // Sleep half a second |
| if (++nNumLoops > 10) { // loop up to 10 times |
| bStillRunning = false; |
| } |
| lProcesses = null; |
| System.gc(); |
| Thread.yield(); |
| } catch (InterruptedException e) { |
| e.printStackTrace(); |
| bStillRunning = false; |
| } |
| } |
| } |
| |
| } |