请问android app如何启动DexClassLoader动态加载的jar包中定义的service
架构需求就是这样,Service类定义在一个Jar包插件,通过网络下载或者push到SD卡中,然后要求Service在新进程中启动。
运行时出现找不到Service类的错误,然后程序错误崩溃:
Caused by: java.lang.ClassNotFoundException: Didn't find class JarService
贴个简单代码示例吧
主Activity就是load SD卡上的jar包,反射获取类名,intent启动service
public class MainActivity extends ActionBarActivity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
ClassLoader dexLoader = new DexClassLoader("/sdcard/jarservicetest.jar", getCacheDir().getAbsolutePath(), null, getClassLoader());
//ClassLoader dexLoader = getClassLoader();
try {
Log.i(TAG, "try");
Class> activityClass = dexLoader.loadClass("com.example.jarservicetest.JarService");
Intent intent = new Intent(this, activityClass);
startService(intent);
} catch (ClassNotFoundException e) {
Log.i(TAG, "catch");
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Service就一空壳
public class JarService extends Service{
private final String TAG = "JARSERVICE";
@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i(TAG, "onCreate");
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
Manifest文件中声明了Service
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >
请教达人们,面对这种需求,有啥解决办法?
相关阅读:
intellij idea这里mapping为什么只有一行显示?
node端的缓存策略
php设置中文cookie,读取echo出来乱码,写进mysql又没有乱码,为什么?
WSAGetLastError返回-1是什么意思?
js匿名函数作用域问题
.uim和.line是什么文件,怎么样可以打开?
js同级特定元素获取
请问我现在用的iOS AFNetWorking 3.0版本,有没有什么办法使用七牛的SDK?
Javascript是单线程的么
git分支模型的疑问
js中创建一个function的2种方法哪个好?
一些大规模的 C++ 项目是如何构建的?
用hexo搭建的github博客,hexo d之后报错
页面高度自适应的浏览器兼容如何解决?
如何在onResp里区分不同的微信分享
关于 RESTful 的 「API 文档」
在canvas上画图添加缩放功能如何以鼠标指针的坐标为缩放中心
gulp-sass经常报文件未找到
hdfs如何远程访问?
为什么使用setTimeout()后要clearTimeout()?