android service java_IsolatedService.java

The file containing the source code shown below is located in the corresponding directory in /samples/android-/...

/*

* Copyright (C) 2012 The Android开源工程

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.example.android.apis.app;

import android.app.Activity;

import android.app.Service;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.RemoteException;

import android.os.IBinder;

import android.os.RemoteCallbackList;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.TextView;

// Need the following import to get access to the app resources, since this

// class is in a sub-package.

import com.example.android.apis.R;

/**

* This is an example if implementing a Service that uses android:isolatedProcess.

*/

public class IsolatedService extends Service {

/**

* This is a list of callbacks that have been registered with the

* service. Note that this is package scoped (instead of private) so

* that it can be accessed more efficiently from inner classes.

*/

final RemoteCallbackList mCallbacks

= new RemoteCallbackList();

int mValue = 0;

@Override

public void onCreate() {

Log.i("IsolatedService", "Creating IsolatedService: " + this);

}

@Override

public void onDestroy() {

Log.i("IsolatedService", "Destroying IsolatedService: " + this);

// Unregister all callbacks.

mCallbacks.kill();

}

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

/**

* The IRemoteInterface is defined through IDL

*/

private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {

public void registerCallback(IRemoteServiceCallback cb) {

if (cb != null) mCallbacks.register(cb);

}

public void unregisterCallback(IRemoteServiceCallback cb) {

if (cb != null) mCallbacks.unregister(cb);

}

};

@Override

public void onTaskRemoved(Intent rootIntent) {

Log.i("IsolatedService", "Task removed in " + this + ": " + rootIntent);

stopSelf();

}

private void broadcastValue(int value) {

// Broadcast to all clients the new value.

final int N = mCallbacks.beginBroadcast();

for (int i=0; i

try {

mCallbacks.getBroadcastItem(i).valueChanged(value);

} catch (RemoteException e) {

// The RemoteCallbackList will take care of removing

// the dead object for us.

}

}

mCallbacks.finishBroadcast();

}

// ----------------------------------------------------------------------

public static class Controller extends Activity {

static class ServiceInfo {

final Activity mActivity;

final Class> mClz;

final TextView mStatus;

boolean mServiceBound;

IRemoteService mService;

ServiceInfo(Activity activity, Class> clz,

int start, int stop, int bind, int status) {

mActivity = activity;

mClz = clz;

Button button = (Button)mActivity.findViewById(start);

button.setOnClickListener(mStartListener);

button = (Button)mActivity.findViewById(stop);

button.setOnClickListener(mStopListener);

CheckBox cb = (CheckBox)mActivity.findViewById(bind);

cb.setOnClickListener(mBindListener);

mStatus = (TextView)mActivity.findViewById(status);

}

void destroy() {

if (mServiceBound) {

mActivity.unbindService(mConnection);

}

}

private OnClickListener mStartListener = new OnClickListener() {

public void onClick(View v) {

mActivity.startService(new Intent(mActivity, mClz));

}

};

private OnClickListener mStopListener = new OnClickListener() {

public void onClick(View v) {

mActivity.stopService(new Intent(mActivity, mClz));

}

};

private OnClickListener mBindListener = new OnClickListener() {

public void onClick(View v) {

if (((CheckBox)v).isChecked()) {

if (!mServiceBound) {

if (mActivity.bindService(new Intent(mActivity, mClz),

mConnection, Context.BIND_AUTO_CREATE)) {

mServiceBound = true;

mStatus.setText("BOUND");

}

}

} else {

if (mServiceBound) {

mActivity.unbindService(mConnection);

mServiceBound = false;

mStatus.setText("");

}

}

}

};

private ServiceConnection mConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className,

IBinder service) {

mService = IRemoteService.Stub.asInterface(service);

if (mServiceBound) {

mStatus.setText("CONNECTED");

}

}

public void onServiceDisconnected(ComponentName className) {

// This is called when the connection with the service has been

// unexpectedly disconnected -- that is, its process crashed.

mService = null;

if (mServiceBound) {

mStatus.setText("DISCONNECTED");

}

}

};

}

ServiceInfo mService1;

ServiceInfo mService2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.isolated_service_controller);

mService1 = new ServiceInfo(this, IsolatedService.class, R.id.start1, R.id.stop1,

R.id.bind1, R.id.status1);

mService2 = new ServiceInfo(this, IsolatedService2.class, R.id.start2, R.id.stop2,

R.id.bind2, R.id.status2);

}

@Override

protected void onDestroy() {

super.onDestroy();

mService1.destroy();

mService2.destroy();

}

}

}

Except as noted, this content is

licensed under Creative Commons Attribution 2.5. For details and

restrictions, see the Content

License.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.IllegalStateException: ScrollView can host only one direct child at androidx.core.widget.NestedScrollView.addView(NestedScrollView.java:507) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1131) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1130) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1101) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:505) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:360) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:443) at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:121) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:722) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$9(RenderTask.java:879) at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:194) at com.android.tools.idea.rendering.RenderExecutor$PriorityRunnable.run(RenderExecutor.kt:292) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
最新发布
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值