mirror of
http://galexander.org/git/simplesshd.git
synced 2024-11-30 11:18:12 +00:00
implemented startForeground(), with some reservation
This commit is contained in:
parent
a2b14e405c
commit
ae7703fad0
69
NOTES
69
NOTES
@ -245,8 +245,69 @@ all of the off_t to off64_t and hope for the best.
|
|||||||
sftp and rsync work! Not gonna bother testing scp on big files...
|
sftp and rsync work! Not gonna bother testing scp on big files...
|
||||||
|
|
||||||
|
|
||||||
XXX - Jared Stafford says startForeground() improves responsiveness
|
October 1, 2016.
|
||||||
substantially on Nkey Lime Pie
|
|
||||||
|
|
||||||
XXX - if you remove it from the recent apps list, does it stop the service??
|
Jared Stafford told me startForeground() improves responsiveness on
|
||||||
XXX - support password-based logins?
|
Nougat. There had been a comment suggesting startForeground(), but I
|
||||||
|
never got around to trying it because it has worked "well enough". With
|
||||||
|
Nougat, though, there is a definite tendency for SimpleSSHD to be
|
||||||
|
non-responsive. I'm not sure exactly what its cause is, but the symptom
|
||||||
|
I notice most frequently is that the first ssh connection after a while
|
||||||
|
will be delayed "a long time" - on the order of 10-30 seconds, or maybe
|
||||||
|
indefinitely sometimes. Oddly, a second connection can sometimes get
|
||||||
|
through undelayed, even before the first connection does. It is as if
|
||||||
|
the fork() of process for the new connection is where the delay is, not
|
||||||
|
in the listen() call.
|
||||||
|
|
||||||
|
That's not overall too surprising, Nougat is a lot harsher about
|
||||||
|
background processes as part of a Google push to reduce power consumption
|
||||||
|
on idle devices.
|
||||||
|
|
||||||
|
Another concern is related to a change back in July - sometimes the
|
||||||
|
system will kill the sshd process for no good reason (maybe because they
|
||||||
|
removed it from the recent apps list). The remedy I settled on was to
|
||||||
|
monitor for the sshd process dying from within the regular
|
||||||
|
Android-managed process, and restart it. I guess I didn't write down
|
||||||
|
where in the documentation I found it, but Android seems expressly
|
||||||
|
antagonistic to non-system-managed processes. If they ever get more
|
||||||
|
hard-assed about that, this whole idea goes out the window.
|
||||||
|
|
||||||
|
Anyways, I implemented startForeground(), and I am unhappy that it
|
||||||
|
requires a Notification. At API 7 (Android 2.1) those are really
|
||||||
|
primitive. For example, the PRIORITY_MIN behavior which will sometimes
|
||||||
|
hide the notification is added in API 16 (Android 4.1). So, I've got it
|
||||||
|
with this stupid old-style notification, and it really doesn't look good,
|
||||||
|
and it is always present. That is not awesome.
|
||||||
|
|
||||||
|
On the other hand, it's easy to block the notifications, and a few people
|
||||||
|
have expressed an interest in a notification.
|
||||||
|
|
||||||
|
It doesn't seem worth it to me to upgrade to a newer API just for the
|
||||||
|
better notifications... On the other hand, Google Play shows that I have
|
||||||
|
862 users:
|
||||||
|
Android 7+ : 3.13%
|
||||||
|
Android 6+ : 37.47%
|
||||||
|
Android 5+ : 67.86%
|
||||||
|
Android 4.1+: 96.62%
|
||||||
|
Android 4.0+: 98.01%
|
||||||
|
|
||||||
|
The oldest reported version is Android 2.3.
|
||||||
|
|
||||||
|
So, there are a few people on very old versions, but actually SimpleSSHD
|
||||||
|
is used on newer devices than the average app, which is the reverse of my
|
||||||
|
typical trend. So a few people would be negatively impacted, but not a
|
||||||
|
very large number. I could switch to multi-APK mode so that legacy users
|
||||||
|
are just stuck with an unsupported back-version, which is probably what
|
||||||
|
they truly want anyways..
|
||||||
|
|
||||||
|
Anyways, I'm gonna use it with startForeground() and the notifications
|
||||||
|
disabled for a while, and if I find it to be an improvement then I'll
|
||||||
|
just make it so clicking on the notification goes to the app, update the
|
||||||
|
doc, and then publish it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
XXX - make clicking on the notification go to the app?
|
||||||
|
|
||||||
|
|
||||||
|
XXX - support password-based logins for boot-strapping?
|
||||||
|
BIN
res/drawable/notification_icon.png
Normal file
BIN
res/drawable/notification_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
@ -1,5 +1,6 @@
|
|||||||
package org.galexander.sshd;
|
package org.galexander.sshd;
|
||||||
|
|
||||||
|
import android.app.Notification;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -31,15 +32,12 @@ public class SimpleSSHDService extends Service {
|
|||||||
if ((intent == null) ||
|
if ((intent == null) ||
|
||||||
(!intent.getBooleanExtra("stop", false))) {
|
(!intent.getBooleanExtra("stop", false))) {
|
||||||
do_start();
|
do_start();
|
||||||
/* XXX - maybe we should call startForeground(), but then we'd have to make a
|
do_foreground();
|
||||||
* bogus notification... and START_STICKY seems to actually do a good job of
|
|
||||||
* restarting us if we're killed... */
|
|
||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
} else {
|
} else {
|
||||||
stop_sshd();
|
stop_sshd();
|
||||||
|
stop_service();
|
||||||
SimpleSSHD.update_startstop();
|
SimpleSSHD.update_startstop();
|
||||||
stopSelf();
|
|
||||||
/* XXX - need stopForeground() too ? */
|
|
||||||
return START_NOT_STICKY;
|
return START_NOT_STICKY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,10 +50,17 @@ public class SimpleSSHDService extends Service {
|
|||||||
* the package is upgraded... so it's really pretty useless */
|
* the package is upgraded... so it's really pretty useless */
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
stop_sshd();
|
stop_sshd();
|
||||||
stopSelf();
|
stop_service();
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void do_foreground() {
|
||||||
|
Notification n = new Notification(R.drawable.notification_icon,
|
||||||
|
"SimpleSSHD", 0);
|
||||||
|
n.tickerText = "SimpleSSHD";
|
||||||
|
startForeground(1, n);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean is_started() {
|
public static boolean is_started() {
|
||||||
return (sshd_pid != 0);
|
return (sshd_pid != 0);
|
||||||
}
|
}
|
||||||
@ -71,6 +76,11 @@ public class SimpleSSHDService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void stop_service() {
|
||||||
|
stopSelf();
|
||||||
|
stopForeground(true);
|
||||||
|
}
|
||||||
|
|
||||||
private static void maybe_restart(int pid) {
|
private static void maybe_restart(int pid) {
|
||||||
boolean do_restart = false;
|
boolean do_restart = false;
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
|
Loading…
Reference in New Issue
Block a user