我想检查服务是否正在运行l写了这段代码
public class startServiceOrNo {
public static void startServiceIfItsNotRuning(Class<?> class1, Context context) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (class1.getName().equals(service.service.getClassName())) {
Lg.d("servisstart SERVICE ALREADY START" + class1.getName());
return;
}
}
Lg.d("servisstart SSERVICE NEW SERVIS " + class1.getName());
context.startService(new Intent(context, class1));
}
Run Code Online (Sandbox Code Playgroud)
并使用它startServiceOrNo.startServiceIfItsNotRuning(OfflineChopsMonitor.class,this)
如果我检查来自一个类的服务它的工作,但如果我检查来自不同类的相同服务,它的检查不起作用
对于Android:我需要永久保存数据,但也能够编辑(显然读取)它.用户不应访问此数据 - 它可以包含高分的内容,用户不得编辑.
我会(并且已经)使用过Internal Storage,但我不确定它实际上有多安全.这里说:
您可以将文件直接保存在设备的内部存储中.默认情况下,保存到内部存储的文件对应用程序是私有的,而其他应用程序无法访问它们(用户也无法访问).当用户卸载您的应用程序时,将删除这些文件.
这基本上就是我需要的东西 - 但它真的安全吗?是否可以通过root设备访问(可能只读取?)?(或者其他任何方式?)
SQLite数据库或共享内存怎么样?它们更适合保存(少量)数据吗?
另外:通常建议在内部以不同的方式处理"秘密"数据吗?(比如不将它(内部)保存为Integer/String但加密某种类型)
我正在尝试开发一个ObjectPool,它可以与任何Object一起使用,而不会改变Pool和Object的来源 - 但我找不到任何方法来编写get() -function("Maincode"获取一些Object来自池)因为存在类型不匹配(无法从Object转换为TestObject)
这是我的代码到目前为止:
ObjectPool的:
public Object get() {
int first = availableObjects.get(0);
availableObjects.remove(0);
return objects.get(first);
}
Run Code Online (Sandbox Code Playgroud)
在对象(ArrayList)中,池中有所有对象,availableObjects 只包含所有可用对象的列表.我基本上只是返回第一个可用对象并将其标记为不可用.
Maincode:
TestObject test = objectPoolS.get();
Run Code Online (Sandbox Code Playgroud)
如何使get()- Method更通用/特定,以便每次使用不同的类而不在主代码上解析时,它都可以在不调整池的情况下工作?
使用该池的更通用版本,get()方法将如何正确显示?
(任何其他反馈非常感谢!)
更新:工作(固定)下面的MainCode版本
更新2:
我刚刚意识到它不能像这样工作,我需要在池中创建新的对象 - 如果没有为每种对象调整池,这似乎很难做到.
那么我可以以某种方式删除池中所有对象之间的引用吗?(因为我使用baseObject来初始化所有对象,实际上我只有5个对1个对象的引用)
或者有更好的方法来管理它吗?(不强制用户在其代码中创建对象)
完整代码到目前为止:
ObjectPool的
public class ObjectPoolS<T> {
int numberOfObjects;
boolean autoExtending;
T baseObject;
ArrayList<T> objects;
ArrayList<Integer> availableObjects;
public ObjectPoolS(T baseObject, int capacity, boolean allowAutoExtending) {
this.numberOfObjects = capacity;
this.baseObject = baseObject;
this.autoExtending = allowAutoExtending;
objects = …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中添加了一个OSMDroid地图,它工作正常,但如果我缩小,它会崩溃.
我在用户当前位置加载Map时添加一个Item,并在加载地图后在AsyncTask中再加载10个.
更新:工作解决方案
在我下面的旧代码中,我在用户位置向地图添加了一个"base"-Item,并ItemizedItemOverlay为地图创建了一个.然后我加载了更多OverlayItems并将它们添加到列表中,但它们没有出现在地图上.
现在我创建了ItemizedItemOverlayAsyncTask完成加载所有项目之后,现在项目全部可见,OnItemSingleTapUp按预期工作,地图上的Double-Tap也可以,并且不再有崩溃.我仍然不知道是什么导致了崩溃,但它的工作原理是这样的.
可能的问题:
OverlayItems的列表初始化为零对象(显然),但在我添加一个OverlayItem之后,它包含1个OverlayItem + 11个更多的null-对象(或null-Refernces?null-Items?正确的术语是什么? )
编辑: didnt引起的问题,还是陌生的.
编辑:似乎我只是在添加更多项目时遇到崩溃.
这是我的完整代码和Logcat:
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapController = this.mapView.getController();
mapController.setZoom(25);
GeoPoint center = new GeoPoint(DataManager.glat, DataManager.glon);
mapController.setCenter(center);
mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100,
this);
items = new ArrayList<OverlayItem>(); // items now null
items.add(new OverlayItem("Here", "SampleDescription", center));
// items now contains 1 OverlayItem and 11 null-items
this.mLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int …Run Code Online (Sandbox Code Playgroud) 我已经实现了OSMDroid并添加了一个自定义标记,如下所示:
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapController = this.mapView.getController();
mapController.setZoom(25);
GeoPoint center = new GeoPoint(DataManager.glat, DataManager.glon);
mapController.setCenter(center);
OverlayItem newItem = new OverlayItem("Here", "SampleDescription", center);
Drawable newMarker = this.getResources().getDrawable(R.drawable.marker);
newItem.setMarker(newMarker);
Run Code Online (Sandbox Code Playgroud)
该标记应位于用户的位置,默认情况下,地图应居中。只要我不缩放,效果就很好:

但是当我缩小时,标记会移动:

距离随缩放级别增加:

知道这是由什么引起的吗?自定义标记是否有任何限制/准则?
注意:使用默认标记时不会发生这种情况。