isAndroidAppPidAlive function

bool isAndroidAppPidAlive(
  1. int pid
)

Implementation

bool isAndroidAppPidAlive(int pid) {
  if (!isAndroidTarget()) return false;
  final device = readDevice();
  if (device == null || device.isEmpty) return false;
  final appId = readAppId();
  try {
    if (appId != null && appId.isNotEmpty) {
      final result = Process.runSync(adbExecutable, [
        '-s',
        device,
        'shell',
        'pidof',
        appId,
      ]);
      if (result.exitCode == 0) {
        final pids = (result.stdout as String)
            .trim()
            .split(RegExp(r'\s+'))
            .where((value) => value.isNotEmpty)
            .map(int.tryParse)
            .whereType<int>();
        if (pids.contains(pid)) return true;
      }
    }
  } catch (_) {
    // Fall back to ps parsing below.
  }

  try {
    final result = Process.runSync(adbExecutable, [
      '-s',
      device,
      'shell',
      'ps',
      '-A',
    ]);
    if (result.exitCode != 0) return false;
    final pidText = pid.toString();
    final lines = (result.stdout as String).split('\n').where((line) => line.trim().isNotEmpty);
    for (final line in lines) {
      final fields = line.trim().split(RegExp(r'\s+'));
      if (fields.length < 2) continue;
      if (fields[1] == pidText) return true;
    }
  } catch (_) {
    return false;
  }

  return false;
}