我正在编写一个Android应用程序,其中包含UI和运行的单独进程.我想在主进程和我的应用程序中定义的服务之间共享简单信息,该服务在不同的进程中执行.为了这个目的,我发现使用AIDL进行进程间通信会很麻烦.
问题是:使用应用程序的共享首选项在这两个进程之间进行通信是否安全?这是:读取和写入相同的共享首选项.
我想知道它是否真的有效.在android开发人员中有关共享首选项的参考(http://developer.android.com/reference/android/content/SharedPreferences.html),他们声明:注意:目前这个类不支持跨多个进程使用.这将在稍后添加.但我不确切地知道这是什么意思.
谢谢你的帮助
android:isolatedProcess和之间有什么区别android:process?请参阅:http://developer.android.com/guide/topics/manifest/service-element.html我想创建一个ListView允许用户下载许多文件并在每个ListView项目中显示进度条状态的创建.它看起来像这样:

下载ListView有一些规则:
ListView项目中,其中包含进度条,百分比和当前状态(下载,等待,完成).ListViewListView是在下载活动中.用户可以更改为其他活动.当他们离开时,继续在后台下载.当他们回来时,显示下载任务的当前进度和状态.我试着用ThreadPoolExcutor一个Service.对于每个下载任务,我可以完成百分比,但我不知道如何将它们广播到适配器以显示进度.而且我不知道如何在后台运行所有任务,然后在包含活动的活动ListView处于活动状态时发布进度并保留已完成的任务
如果有任何库或示例可以解决我的问题,那将会很棒.提前致谢!
P/S:我已经搜索过类似的问题,但我找不到这个问题的解决方案,所以我不得不详细地创建自己的问题.所以请不要将其标记为duplicate.谢谢.
如何在没有解锁的情况下从锁定屏幕发出一些有效的通知?单击操作,通知上的按钮或完成通知后,我想进行API调用(无需键入解锁代码)
基于这个问题的答案,我试图通过一个在锁定屏幕上工作的动作发出通知,而无需解锁设备.该操作不需要任何进一步的界面或交互(想想"发送API请求").
通知和单击可以使用未锁定的设备.然而,当锁定时我仍然需要先输入解锁代码,所以要么有新的事情发生,要么我误解了它应该工作的方式.
如果我理解正确,我可以将我的可见性设置为'public'来显示内容(这是有效的),而不是定义一个动作(似乎不公开)我可以处理(现在可见)布局的点击.我尝试使用下面的代码,但显然它不起作用.
我已经尝试将意图发送到我的应用程序和服务,正如弗洛里安建议的那样.
这是我开始通知的代码(它存在于一个Activity中,代码缩短了以方便您使用)
private void startNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setOngoing(true)
.setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
.setContentTitle("title text")
.setContentText("content text");
Intent openIntent = new Intent(MyMainActivity.this, MyMainActivity.class);
openIntent.setAction("some_string");
PendingIntent pOpenIntent = PendingIntent.getActivity(this, 0, openIntent, 0);
builder.setContentIntent(pOpenIntent);
RemoteViews view = new RemoteViews(getPackageName(), R.layout.notification);
builder.setContent(view);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.notify(id, builder.build());
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我也尝试过florian建议的服务,并将其作为电话:
Intent yepIntent = new Intent(this, MyIntentService.class);
yepIntent.setAction("test");
yepIntent.putExtra("foo", true);
yepIntent.putExtra("bar", "more info");
PendingIntent yepPendingIntent = PendingIntent.getService(this, notificationId, yepIntent, PendingIntent.FLAG_CANCEL_CURRENT); …Run Code Online (Sandbox Code Playgroud) notifications android lockscreen android-service android-5.0-lollipop
在以前的Android版本中,我使用此方法查找来自其他应用程序的服务是否已启动并正在运行.它对我来说可靠:
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> services = manager.getRunningServices(Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
但是,对于Android O,现在不推荐使用此功能,只会返回有关调用应用服务的信息.我已经研究过其他解决方案,但我不想要求用户提供更多权限(UsageStatsManager,NotificationManager等).
是否有另一种解决方案可以获取Android O中是否有来自其他应用的服务正在运行?
我正在开发一个SDK,需要从后台启动Foreground服务。因为它使用的是后台定位和蓝牙相关的作品。如果应用程序被终止,监控将在后台执行。这就是我使用前台服务的原因。有一个条件是从后台启动前台服务。
目前,我的 SDK 使用Service来处理这项工作。但Android 12上不支持从后台启动服务。
我试图从后台启动服务,下面的异常抛出。
ForegroundServiceStartNotAllowedException: Service.startForeground() not allowed due to mAllowStartForeground false
Run Code Online (Sandbox Code Playgroud)
我如何使用WorkManager 来解决这个问题,我的所有处理都是由 Service 类完成的,如何将 Service 对象传递给Worker类并在 Worker 类中启动此作业。
实际上,我的项目是基于信标技术的。信标信号用于向用户显示不同的推荐。
在我当前的实现中,如果应用程序被用户杀死,并且还接受前台服务,则SDK将在后台运行。并检测信标并提供适当的操作。
我的实现是,如果应用程序使用前台服务“关闭”来初始化我的 SDK,那么稍后,当应用程序位于后台并尝试从后台启动前台服务时,会抛出此异常。与前台服务相关的决策由服务器端 API 持有。我定期检查服务器端值是否更改,如果值更改,则更改后的操作会反映在 SDK 中。
android android-service foregroundnotification android-workmanager android-12
我想构建一个访问来自sim工具包的信息的应用程序.我的运营商允许您访问诸如查看帐户余额,发送和接收现金以及大量服务等服务.是否有任何资源,教程甚至只是指示我如何访问SIM工具包中的信息.
Android Service和IntentServiceAndroid 之间有什么区别?
Android AsyncTask和IntentServiceAndroid 之间有什么区别?
我有一个由活动启动(未绑定)的服务.如果活动被破坏(例如通过按下后退按钮),则服务继续运行,这当然是有意的.但是,如果我将活动从"最近的应用"列表中滑出,则会立即重新启动该服务.这是可重现的,每次从列表中删除活动/应用程序时,都会对服务的onCreate方法进行新调用.两者之间没有调用onDestroy!
首先我认为服务被android杀死了,尽管我没有看到杀人的理由(活动和服务都没有资源消耗的东西,事实上它们是简约的,什么都不做).但后来我注意到服务实际上崩溃了.
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Run Code Online (Sandbox Code Playgroud)
代码并不值得注意,但在这里
活动:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
Run Code Online (Sandbox Code Playgroud)
服务:
public class TestService extends …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,它将启动一个能够监听剪贴板更改的服务.
我真正想要的是永久记录(并在存储中写入)剪贴板中的每一个变化,所以当我启动我的应用程序时,我可以读取该服务所写的存储文件.这意味着,我的应用程序和服务之间不需要直接通信,也不需要使用唤醒锁来保持设备运行(因为剪贴板在设备处于睡眠状态时几乎不会改变).
我正在使用处理程序来反复检查剪贴板,我想知道如何实现clipboardListener来检查这些更改.