If I understand you correctly, simply test if the maximum value in the list is Positive:
Positive @ Max @ a
Speed comparison with another method that was posted:
timeAvg =
Function[func,
Do[If[# > 0.3, Return[#/5^i]] & @@ Timing@Do[func, {5^i}], {i, 0, 15}],
HoldFirst];
a = RandomInteger[{-1*^7, 2}, 1*^7];
Total@UnitStep[-a] =!= Length@a // timeAvg
Positive@Max@a // timeAvg
0.0624
0.01148