Service内部类的写法
2016-01-12 13:36
190 查看
public class MainAcitivityService extends Activity implements View.OnClickListener { private static final String Tag = MainAcitivityService.class.getSimpleName(); private Button btn; private TextView txt; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); txt = (TextView) findViewById(R.id.txt); Log.e(Tag, "onCreate Current thread:" + Thread.currentThread()); } @Override public void onClick(View v) { Intent intent = new Intent(this, MyService.class); startService(intent); } public class MyService extends IntentService { private int count; public MyService() { super("MyService"); } @Override protected void onHandleIntent(Intent intent) { int total = 10; while (total-- > 0) { Log.e(Tag, "You exec IntentService" + count++); Log.e(Tag, "Current thread:" + Thread.currentThread()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
manifast.xml文件中进行注册:
<service android:name="com.tu.MainAcitivityService$MyService">
java.lang.RuntimeException: Unable to instantiate service com.tu.MainAcitivityService$MyService: java.lang.InstantiationException: can't instantiate class com.tu.MainAcitivityService$MyService; no empty constructor at android.app.ActivityThread.handleCreateService(ActivityThread.java:2368) at android.app.ActivityThread.access$1600(ActivityThread.java:136) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4875) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.InstantiationException: can't instantiate class com.tu.MainAcitivityService$MyService; no empty constructor
表面看好像是说没有空的构造方法,其实这里的类需要是一个静态的就可以了。
正确的写法是:
class outclass extends Activity { // ... @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); // ... } public static class innerService extends Service { @Override public void onStartCommand() { //.... } } }
and you need to declare below to your Androidmanifest.xml
<service android:name=".outclass$innerService"/>
note the dollar sign !
相关文章推荐
- 新捷达 新桑塔纳
- bitset二
- C#生成各种随机数 随机字母
- 02将代码开源到github(不会使用github的来看看吧)
- 程序员
- jQuery Validation Plugin使用过程中需要注意的地方
- NGUI事件系统、相关变量、控件等的直接用法
- IOS使用Reachability实时检测网络连接状况
- bitset 一
- 面向对象编程
- grep,sed,awk
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- ZooKeeper架构设计及其应用要点
- 关于 new(std::nothrow)
- android studio 导入项目Gradle版本不同解决方法
- win7上vc6连接mysql的问题解决办法
- Android --- Zygote和System进程启动过程简要分析
- INSTALL_FAILED_VERSION_DOWNGRADE报错
- SpringMVC——入门
- IOS-利用AFNetworking监听网络状态