您的位置:首页 > 其它

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 !
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: