说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android开发中实现跨进程通讯的AIDL接口

HTML文档下载 WORD文档下载 PDF文档下载
在Android开发中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方式. 理论上AIDL可

 

在Android开发中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢?  显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦.
AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.
AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.
Android开发中实现跨进程通讯的具体步骤如下:
1、创建AIDL文件, 在这个文件里面定义接口, 该接口定义了可供客户端访问的方法和属性。 如: ITaskBinder.adil
package com.cmcc.demo;
import com.cmcc.demo.ITaskCallback;
interface ITaskBinder {
    boolean isTaskRunning();
    void stopRunningTask();
    void registerCallback(ITaskCallback cb);
    void unregisterCallback(ITaskCallback cb);
}
其中: ITaskCallback在文件ITaskCallback.aidl中定义:
package com.cmcc.demo;
interface ITaskCallback {
    void actionPerformed(int actionId);
}
注意: 理论上, 参数可以传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle做为参数, 据说用Ant编译可以, 我没做尝试.
2、Android开发中编译AIDL文件, 用Ant的话, 可能需要手动, 使用Eclipse plugin的话,可以根据adil文件自动生产java文件并编译, 不需要人为介入.
3、在Java文件中, 实现AIDL中定义的接口. 编译器会根据AIDL接口, 产生一个JAVA接口。这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用需要的几个方法。接下来就需要自己去实现自定义的几个接口了.
ITaskBinder.aidl中接口的实现, 在MyService.java中接口以内嵌类的方式实现:
private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() {
        public void stopRunningTask() {
            //@TODO
        }
        public boolean isTaskRunning() {
            //@TODO
            return false;
        }
        public void registerCallback(ITaskCallback cb) {
            if (cb != null) mCallbacks.register(cb);
        }
        public void unregisterCallback(ITaskCallback cb) {
            if (cb != null) mCallbacks.unregister(cb);
        }
};
在MyActivity.java中ITaskCallback.aidl接口实现:
private ITaskCallback mCallback = new ITaskCallback.Stub() {
        public void actionPerformed(int id) {
           //TODO
            printf("callback id=" + id);
        }
};
4、向客户端提供接口ITaskBinder, 如果写的是service,扩展该Service并重载onBind ()方法来返回一个实现上述接口的类的实例。这个地方返回的mBinder,就是上面通过内嵌了定义的那个. (MyService.java)
    public IBinder onBind(Intent t) {
        printf("service on bind");
        return mBinder;
}
在Activity中, 可以通过Binder定义的接口, 来进行远程调用.
5、在服务器端回调客户端的函数. 前提是当客户端获取的IBinder接口的时候,要去注册回调函数, 只有这样, 服务器端才知道该调用那些函数在:MyService.java中:
    void callback(int val) {
        final int N = mCallbacks.beginBroadcast();
        for (int i=0; i<N; i++) {
            try {
                mCallbacks.getBroadcastItem(i).actionPerformed(val);
            } catch (RemoteException e) {
                // The RemoteCallbackList will take care of removing
                // the dead object for us.
            }
        }
        mCallbacks.finishBroadcast();
}
AIDL的创建方法:
AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。由于远程调用的需要, 这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:
1. 不需要import声明的简单Java编程语言类型(int,boolean等)
2. String, CharSequence不需要特殊声明 
3. List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型. 
((另外: 我没尝试Parcelables, 在Eclipse+ADT下编译不过, 或许以后会有所支持).
下面是AIDL语法: 
// 文件名: SomeClass.aidl 
// 文件可以有注释, 跟java的一样 
// 在package以前的注释, 将会被忽略. 
// 函数和变量以前的注释, 都会被加入到生产java代码中.package com.cmcc.demo; 
// import 引入语句import com.cmcc.demo.ITaskCallback;
interface ITaskBinder {
    //函数跟java一样, 可以有0到多个参数 ,可以有一个返回值
    boolean isTaskRunning();
    void stopRunningTask();   
    //参数可以是另外的一个aidl定义的接口
    void registerCallback(ITaskCallback cb);  
    void unregisterCallback(ITaskCallback cb);
    //参数可以是String, 可以用in表入输入类型, out表示输出类型.
    int getCustomerList(in String branch, out String[] customerList);
}
实现接口时有几个原则:
.抛出的异常不要返回给调用者. 跨进程抛异常处理是不可取的..IPC调用是同步的。如果你知道一个IPC服务需要超过几毫秒的时间才能完成地话,你应该避免在Activity的主线程中调用。 也就是IPC调用会挂起应用程序导致界面失去响应. 这种情况应该考虑单起一个线程来处理..不能在AIDL接口中声明静态属性。IPC的调用步骤:
1. 声明一个接口类型的变量,该接口类型在.aidl文件中定义。 
2. 实现ServiceConnection。 
3. 调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.  
4. 在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service). 调用    YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换为YourInterface类型。 
5. 调用接口中定义的方法。 你总要检测到DeadObjectException异常,该异常在连接断开时被抛出。它只会被远程方法抛出。 
6. 断开连接,调用接口实例中的ApplicationContext.unbindService()
下面是Android开发中实现AIDL接口的整个程序:
1. ITaskCallback.aidl
package com.cmcc.demo;
interface ITaskCallback {
    void actionPerformed(int actionId);
}
2. ITaskBinder.aidl
package com.cmcc.demo;
import com.cmcc.demo.ITaskCallback;
interface ITaskBinder {
    boolean isTaskRunning();
    void stopRunningTask();   
    void registerCallback(ITaskCallback cb);   
    void unregisterCallback(ITaskCallback cb);
}
3.  MyService.java
package com.cmcc.demo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;
public class MyService extends Service {
    @Override
    public void onCreate() {
        printf("service create");
    }
    @Override
    public void onStart(Intent intent, int startId) {
        printf("service start id=" + startId);
        callback(startId);
    }
    @Override
    public IBinder onBind(Intent t) {
        printf("service on bind");
        return mBinder;
    }
    @Override
    public void onDestroy() {
        printf("service on destroy");
        super.onDestroy();
    }
    @Override
    public boolean onUnbind(Intent intent) {
        printf("service on unbind");
        return super.onUnbind(intent);
    }
    public void onRebind(Intent intent) {
        printf("service on rebind");
        super.onRebind(intent);
    }
    private void printf(String str) {
        Log.e("TAG", "###################------ " + str + "------");
    }
    void callback(int val) {
        final int N = mCallbacks.beginBroadcast();
        for (int i=0; i<N; i++) {
            try {
                mCallbacks.getBroadcastItem(i).actionPerformed(val);
            } catch (RemoteException e) {
                // The RemoteCallbackList will take care of removing
                // the dead object for us.
            }
        }
        mCallbacks.finishBroadcast();
    }
    private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() {
        public void stopRunningTask() {
        }
        public boolean isTaskRunning() {
            return false;
        }
        public void registerCallback(ITaskCallback cb) {
            if (cb != null) mCallbacks.register(cb);
        }
        public void unregisterCallback(ITaskCallback cb) {
            if (cb != null) mCallbacks.unregister(cb);
        }
    };
   
    final RemoteCallbackList<ITaskCallback> mCallbacks
        = new RemoteCallbackList<ITaskCallback>();
}
4. MyActivity.java
package com.cmcc.demo;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.Color;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;
public class MyActivity extends Activity {
   
    private Button btnOk;
    private Button btnCancel;
   
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.test_service);
        btnOk = (Button)findViewById(R.id.btn_ok);
        btnCancel = (Button)findViewById(R.id.btn_cancel);
        btnOk.setText("Start Service");
        btnCancel.setTag("Stop Service");
        btnOk.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
                onOkClick();
            }
        });
        btnCancel.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                onCancelClick();
            }
        });
    }
    void onOkClick() {
        Bundle args = new Bundle();       
        Intent intent = new Intent(this, MyService.class);
        intent.putExtras(args);  
        //printf("send intent to start");
        //startService(intent);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
        startService(intent);
    }
    void onCancelClick() {
        Intent intent = new Intent(this, MyService.class);
        //printf("send intent to stop");
        unbindService(mConnection);
        //stopService(intent);
    }
    private void printf(String str) {
        Log.e("TAG", "###################------ " + str + "------");
    }
    ITaskBinder mService;
    private ServiceConnection mConnection = new ServiceConnection() {
        public void onServiceConnected(ComponentName className,
                IBinder service) {
            mService = ITaskBinder.Stub.asInterface(service);
            try {
                mService.registerCallback(mCallback);
            } catch (RemoteException e) {
            }
        }
        public void onServiceDisconnected(ComponentName className) {
            mService = null;
        }
    };
    private ITaskCallback mCallback = new ITaskCallback.Stub() {
        public void actionPerformed(int id) {
            printf("callback id=" + id);
        }
    };
}

作者:sdhjob

 

在Android开发中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢?  显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦.

AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象.

AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.

Android开发中实现跨进程通讯的具体步骤如下:

 

1、创建AIDL文件, 在这个文件里面定义接口, 该接口定义了可供客户端访问的方法和属性。 如: ITaskBinder.adil

 

package com.cmcc.demo;

 

import com.cmcc.demo.ITaskCallback;

 

interface ITaskBinder {

    boolean isTaskRunning();

    void stopRunningTask();

    void registerCallback(ITaskCallback cb);

    void unregisterCallback(ITaskCallback cb);

}

 

其中: ITaskCallback在文件ITaskCallback.aidl中定义:

 

package com.cmcc.demo;

interface ITaskCallback {

    void actionPerformed(int actionId);

}

 

注意: 理论上, 参数可以传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle做为参数, 据说用Ant编译可以, 我没做尝试.

 

2、Android开发中编译AIDL文件, 用Ant的话, 可能需要手动, 使用Eclipse plugin的话,可以根据adil文件自动生产java文件并编译, 不需要人为介入.

 

3、在Java文件中, 实现AIDL中定义的接口. 编译器会根据AIDL接口, 产生一个JAVA接口。这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用需要的几个方法。接下来就需要自己去实现自定义的几个接口了.

 

ITaskBinder.aidl中接口的实现, 在MyService.java中接口以内嵌类的方式实现:

 

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

        public void stopRunningTask() {

            //@TODO

        }

 

        public boolean isTaskRunning() {

            //@TODO

            return false;

        }

 

        public void registerCallback(ITaskCallback cb) {

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

        }

 

        public void unregisterCallback(ITaskCallback cb) {

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

        }

};

 

在MyActivity.java中ITaskCallback.aidl接口实现:

 

private ITaskCallback mCallback = new ITaskCallback.Stub() {

        public void actionPerformed(int id) {

           //TODO

            printf("callback id=" + id);

        }

};

 

4、向客户端提供接口ITaskBinder, 如果写的是service,扩展该Service并重载onBind ()方法来返回一个实现上述接口的类的实例。这个地方返回的mBinder,就是上面通过内嵌了定义的那个. (MyService.java)

 

    public IBinder onBind(Intent t) {

        printf("service on bind");

        return mBinder;

}

 

在Activity中, 可以通过Binder定义的接口, 来进行远程调用.

 

5、在服务器端回调客户端的函数. 前提是当客户端获取的IBinder接口的时候,要去注册回调函数, 只有这样, 服务器端才知道该调用那些函数在:MyService.java中:

 

    void callback(int val) {

        final int N = mCallbacks.beginBroadcast();

        for (int i=0; i<N; i++) {

            try {

                mCallbacks.getBroadcastItem(i).actionPerformed(val);

            } catch (RemoteException e) {

                // The RemoteCallbackList will take care of removing

                // the dead object for us.

            }

        }

        mCallbacks.finishBroadcast();

}

 

AIDL的创建方法:

 

AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。由于远程调用的需要, 这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:

 

1. 不需要import声明的简单Java编程语言类型(int,boolean等)

 

2. String, CharSequence不需要特殊声明 

3. List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他比支持的类型. 

((另外: 我没尝试Parcelables, 在Eclipse+ADT下编译不过, 或许以后会有所支持).

下面是AIDL语法: 

// 文件名: SomeClass.aidl 

// 文件可以有注释, 跟java的一样 

// 在package以前的注释, 将会被忽略. 

// 函数和变量以前的注释, 都会被加入到生产java代码中.package com.cmcc.demo; 

// import 引入语句import com.cmcc.demo.ITaskCallback;

 

interface ITaskBinder {

    //函数跟java一样, 可以有0到多个参数 ,可以有一个返回值

 

    boolean isTaskRunning();

    void stopRunningTask();   

 

    //参数可以是另外的一个aidl定义的接口

    void registerCallback(ITaskCallback cb);  

 

    void unregisterCallback(ITaskCallback cb);

 

    //参数可以是String, 可以用in表入输入类型, out表示输出类型.

 

    int getCustomerList(in String branch, out String[] customerList);

 

}

实现接口时有几个原则:

 

.抛出的异常不要返回给调用者. 跨进程抛异常处理是不可取的..IPC调用是同步的。如果你知道一个IPC服务需要超过几毫秒的时间才能完成地话,你应该避免在Activity的主线程中调用。 也就是IPC调用会挂起应用程序导致界面失去响应. 这种情况应该考虑单起一个线程来处理..不能在AIDL接口中声明静态属性。IPC的调用步骤:

 

1. 声明一个接口类型的变量,该接口类型在.aidl文件中定义。 

2. 实现ServiceConnection。 

3. 调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.  

4. 在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service). 调用    YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换为YourInterface类型。 

5. 调用接口中定义的方法。 你总要检测到DeadObjectException异常,该异常在连接断开时被抛出。它只会被远程方法抛出。 

6. 断开连接,调用接口实例中的ApplicationContext.unbindService()

 

下面是Android开发中实现AIDL接口的整个程序:

 

1. ITaskCallback.aidl

 

package com.cmcc.demo;

interface ITaskCallback {

    void actionPerformed(int actionId);

}

 

2. ITaskBinder.aidl

package com.cmcc.demo;

import com.cmcc.demo.ITaskCallback;

interface ITaskBinder {

    boolean isTaskRunning();

    void stopRunningTask();   

    void registerCallback(ITaskCallback cb);   

    void unregisterCallback(ITaskCallback cb);

}

 

3.  MyService.java

 

package com.cmcc.demo;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.os.RemoteCallbackList;

import android.os.RemoteException;

import android.util.Log;

public class MyService extends Service {

    @Override

    public void onCreate() {

        printf("service create");

    }

    @Override

    public void onStart(Intent intent, int startId) {

        printf("service start id=" + startId);

        callback(startId);

    }

 

    @Override

    public IBinder onBind(Intent t) {

        printf("service on bind");

        return mBinder;

    }

 

    @Override

    public void onDestroy() {

        printf("service on destroy");

        super.onDestroy();

    }

 

    @Override

 

    public boolean onUnbind(Intent intent) {

        printf("service on unbind");

        return super.onUnbind(intent);

    }

 

    public void onRebind(Intent intent) {

        printf("service on rebind");

        super.onRebind(intent);

    }

 

    private void printf(String str) {

        Log.e("TAG", "###################------ " + str + "------");

    }

 

    void callback(int val) {

        final int N = mCallbacks.beginBroadcast();

        for (int i=0; i<N; i++) {

            try {

                mCallbacks.getBroadcastItem(i).actionPerformed(val);

            } catch (RemoteException e) {

                // The RemoteCallbackList will take care of removing

                // the dead object for us.

            }

        }

        mCallbacks.finishBroadcast();

    }

 

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

        public void stopRunningTask() {

        }

 

        public boolean isTaskRunning() {

            return false;

        }

 

        public void registerCallback(ITaskCallback cb) {

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

        }

 

        public void unregisterCallback(ITaskCallback cb) {

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

        }

    };

 

 

 

    final RemoteCallbackList<ITaskCallback> mCallbacks

        = new RemoteCallbackList<ITaskCallback>();

 

}

 

4. MyActivity.java

 

package com.cmcc.demo;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.graphics.Color;

import android.os.Bundle;

import android.os.IBinder;

import android.os.RemoteException;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

import android.widget.AbsoluteLayout;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.PrintWriter;

 

public class MyActivity extends Activity {

 

 

    private Button btnOk;

    private Button btnCancel;

 

    @Override

 

    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);

        setContentView(R.layout.test_service);

        btnOk = (Button)findViewById(R.id.btn_ok);

        btnCancel = (Button)findViewById(R.id.btn_cancel);

        btnOk.setText("Start Service");

        btnCancel.setTag("Stop Service");

        btnOk.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

                onOkClick();

            }

        });

 

        btnCancel.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                onCancelClick();

            }

        });

    }

 

    void onOkClick() {

        Bundle args = new Bundle();       

        Intent intent = new Intent(this, MyService.class);

        intent.putExtras(args);  

        //printf("send intent to start");

        //startService(intent);

        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

        startService(intent);

    }

 

    void onCancelClick() {

        Intent intent = new Intent(this, MyService.class);

        //printf("send intent to stop");

 

        unbindService(mConnection);

        //stopService(intent);

    }

 

    private void printf(String str) {

        Log.e("TAG", "###################------ " + str + "------");

    }

 

    ITaskBinder mService;

 

    private ServiceConnection mConnection = new ServiceConnection() {

        public void onServiceConnected(ComponentName className,

                IBinder service) {

            mService = ITaskBinder.Stub.asInterface(service);

            try {

                mService.registerCallback(mCallback);

            } catch (RemoteException e) {

            }

        }

 

        public void onServiceDisconnected(ComponentName className) {

            mService = null;

        }

    };

 

    private ITaskCallback mCallback = new ITaskCallback.Stub() {

        public void actionPerformed(int id) {

            printf("callback id=" + id);

        }

    };

}

 

来源:http://blog.csdn.net/sdhjob

 

Kingdom Rush创始人专访:游戏与电影元素混搭 超实用的JavaScript技巧及最佳实践(下) 盖茨和鲍尔默或成挑选微软新CEO的最大阻碍 移动开发进阶:触发式邮件深入分析 King.com传奇再续!Farm Heroes Saga强势登陆iOS、Android 2013综述稿:Clojure这一年及大事件 亚马逊AWS vs.谷歌GCE,彪的是价格? 2014,混合云被广泛采用的一年 传微软拉拢厂商推双启动系统手机 用户可选Windows Phone或Android 为什么游戏领域总是“抄抄抄”! 物竞天择、百家争鸣——评OpenStack生态圈 CES 2014:Intel针对可穿戴技术发布多款产品 直击CES:Pebble推金属版智能手表Pebble Steel 为4K智能电视而生:高通推出骁龙802处理器 英特尔首席执行官阐述可穿戴设备新技术及Edison计算平台 设计师如何写出更棒的项目建议 微软以1亿美元收购Parature“知识库” 登陆CES:三星发布智能家庭平台Smart Home CES 2014:GPS供应商Garmin推健康腕带Vivofit 《近匠》第05期:移动开发工具访谈,个推——有节操的push 【Hadoop技术博客推荐】Hive的那些事 Twitter联合创始人推社交搜索应用Jelly 马云“食言”进军手游分成比例8:2,开发者可拿7成 CodeCombat游戏全面开源:玩游戏也能学编程 Netflix首席云架构师Adrian Cockcroft加盟Battery Ventures Android 4.3附体:RIBX发布FB/Ti 互联网手表 IE11界面布局的秘密武器:Quero Toolbar 【开源专访】Node-Webkit作者王文睿:桌面应用的全新开发方式 CentOS归属红帽:企业级Linux领域社区与商业的融合 印度初创公司Little Eye Labs证实已被Facebook收购 雅虎收购Aviate:重在提升用户体验 关于unix下的双机热备问题。急!!! 靠,用classwizard时为什么只有ctoolbarctr而没有ctoolbar? 高分求救:在word中有没有自动插入行号的功能????? 报表问题 Access97 中取几位小数用哪个函数,round不能用?或着有什么其他的方法,谢谢 h---e---l---p????flash播放插件 sql 的问题,??????? 一个类中包含一个结构数组,但数组长度可变,不用Next串连,用什么方法? 用水晶报表可以连接远程数据库吗?如何做到? 我要使用Realplay控件,放网上和本地文件,谁有实例?我给50分 哪里有扫描程序的源代码, 请问哪里有介绍Borland或Delphi历史的文章﹗ overload operator ++,which is right? 哪里有vb.net 相关的中文电子书? 我用的是API函数ShellAboutA来显示windows式的关于窗口,但却不能显示出来? 如有赐教,不胜感激.请问我如何在pb中获得某个文件的路径,如sqlldr.exe,注册表apppaths中没有? 这样行吗?望大哥们帮忙 如何做DELPHI的帮助 哪位高手知道哪里可以找到pkzip口令压缩的源代码 请指教,我是新手,我搞不清下面的语句什么意思?特别是coords起什么作用 重金诚聘:pb师父。人数不限,报酬300/week,要求:能经常在线。愿者签名。此贴常年有效//偶是牛虻,极有分 请用过jakarta-ant-1.4.1这个编译软件。 如何实现该功能 【Java------能解决这个问题吗???】 VFP的串行通讯 winNT/2000/XP的密码系统到底安不安全? What is the _int64 mean int g721_encoder( int sl,int in_coding,struct g72x_state *state_ptr)这个函数有人...... 请问具备哪些能力,工资可以在8k+,再具备哪些能力,就可以10k+,... horizon_tj,货已经收到,暂时还没有看,先结帐。 在jbuilder5中编译ejb时出错(weblogic6.0)请指教!!! picturebox 如何加上滚动条,是发送什么消息加上的?谢了,晚上我来加分(发言就有分)。 介绍UNIX学习网站 如何在ANIMATE控件上加入鼠标的点击事件 DBChat的小问题,请进 我的3D撞球在csdn发布了,以前下不了的请来试试。 如何用keybd_event模拟:和\的输入? 请教关于操作符“++”重载的问题,欢迎发言! 如何排版??? 奇怪,VC学这么长时间了,居然这么个小问题不知怎么解决? 急,请帮忙介绍学习UNIX的网站,急 Application的用法问题,小妹试了很长时间了,还没有解决,快帮帮忙啊! 关于variant类型的问题? 注册表问题,急急急!!! mysql中怎样设定远程访问权限啊 【Java--------能解决吗???】 有哪位大虾知道ACCESS2000的表支持的最大字段数? 大侠,救命!!调用存储过程 小勺子,接分,多多指教,欧极菜,还没有入门//牛虻 在CMainFrame中,加个鼠标的右键单击消息不能实现,为什么? 免费放送B/S《客户关系管理系统》!!!!!!!!!!!!! 电机星三角启动正反转,正反点动电路图还有个人经验,加的电路短路保护,继电器之累的 如果圆柱体和长方体体积相等,那么圆柱体和长方体可能( ) 选择 1.等底等高的圆柱体、正方体、长方体的体积相比较,( )a.正方体体积大 b.长方体体积大c.圆柱体体积大 d.一样大2.一根圆柱形输油管,内直径是2分米,油在管内的流速是4分米每秒,每秒流 怎样计算长方体的容积和圆柱体的体积 给锅炉做保温算一下用多长保温材料 下面的长方体和圆柱体那个体积大?(单位;厘米)圆柱的周长是25.12平方厘米,高是6厘米(竖着的) 长方体竖着的;高是6厘米,长宽都是8 2、等底等高的圆柱、正方体、长方体的体积相比较[ ] A.正方体体积大 B.长方体体积大 C.圆柱体体积大 D 有一个圆,黄瓜占25%,青菜占60%.1、茄子有1.2千克,黄瓜有2千克,青菜有4.8千克.那么.茄子占总圆的百分之几 大小两个水池都未注满水 若从小池抽水将大池注满 则小池剩5吨水 若从大池抽水将小池注满 则大池剩30吨水 知大池容量是小池的1.5倍,两池中工友多少吨水? 一块菜地,它的6分之1 种茄子,5分之2种辣椒,5分之1种萝卜,其余的种黄瓜.(1)、茄子和萝卜一共占菜地的几分之几?(2)、你还能提出什么数学问题,试着提出并解决 如何准确评价教师的教学水平 大小2池未注满水小池抽水注满大小剩5吨大抽水注满小大剩30吨大容量是小1.5被大小共几吨水写方程 等底等高的圆柱体,正方体,长方体相比较,谁的体积大 通过老师的教育,我认识到错误.这句话对吗 茄子5%黄瓜35%青菜60%,茄子有96kg,茄子千克数约占黄瓜的( )%,约占青菜的( )% 下列蔬菜,主要食用部位都是果实的是A.辣椒玉米萝卜B.番茄茄子白果C.辣椒青菜萝卜D番茄辣椒茄子能解释一下吗?错哪了 这两个老师在教学上有怎样的共同点?作者是怎样具体表现的?请结合语句说说你的看法 一个长方体和一个圆柱体的体积相等,如长方体的底面积是圆柱体底面积的5分之2,那么长方体的高是圆柱体的? “春有菠菜、莴笋,夏有黄瓜、茄子,秋有辣椒、南瓜,冬有萝卜、白菜”这句是排比句吗 把干电池“2节”,小灯泡L,电阻R及多档电键S连接成如图所示电路,就制成了简易的调光小电灯,如果小灯泡L的电阻RL=10欧,定值电阻R=5欧,电源电压为3伏.问:①多档电键S有什么作用?②当多档电 一个长方体,一个圆柱体和一个圆锥体,它们的底面积和体积分别相等,那么圆柱体的高和长方体的高( ),圆锥的高是长方体高的( ). 按类把下列蔬菜分一分 .菠菜 萝卜 黄瓜 茄子 辣椒 南瓜按类把下列蔬菜分一分 .菠菜 萝卜 黄瓜 茄子 辣椒 南瓜 白菜 莴苣 豌豆 按( )分类,共分成( )类.第一类:( ) 第二类:( ) 第三 标有“6V 3W”的小灯泡L与额定功率为4W的电阻R按如图所示的电路连接,闭合开关S时,灯L正常发光,且...标有“6V 3W”的小灯泡L与额定功率为4W的电阻R按如图所示的电路连接,闭合开关S时,灯L正常 长方体和圆柱体的体积相等,长方体的底面积是圆柱体底面积的2/5,那么长方体的高是圆柱体高的( ) 大小两个水池都未注满水,如果从小池抽水将大池注满,则小池还剩水10吨,如果从大池抽水将 小池注满,则大池还剩水20吨,已知大池容量是小池的1.2倍,大池能容多少吨水?甲 乙两个工程队共1980 将一个灯泡连在电路中,灯泡正常工作且功率是40W,串联一个电阻R,电阻功率是3.6W设电源电压不变,灯的电阻不随温度而改变且灯的电阻小于R,此时灯的电功率为多少?请注意了,是灯的电阻比R小 圆锥体圆柱体和长方体各一个,它们的底面积和体积相等,圆柱体的高是长方体的高(),圆锥体的高是长方体的高的(). 怎么算铁的重量?圆柱长9.5米,直径22厘米,厚度1厘米.多重?密度是7.86 一个容积是30立方米的水池,它的进水管1.5小时能装进水7.5立方米,放满这些水要几个小时用比例解 如何组织语文的有效课堂教学 铁的重量怎么算 一个水池装有一根进水管,它5/6小时注入3立方米水,平均每小时可注入()立方米水? 在语文课堂教学中如何进行有效对话 如图所示,电源电动势E=10V,内阻r=0.2,标有8V 16W的灯泡L恰好正常发光,电动机线圈电如图所示,电源电动势E=10V,内阻r=0.2,标有8V 16W的灯泡L恰好正常发光,电动机线圈电阻R'=0.15则电源的输出功率 一个长方体和圆柱体容积,长方体和圆柱底面积的比是3:2(从容器里面量),长方体容器中有1260升,水深6分米,现将一部分水倒入圆柱容器,使得水的深度一样,这时容器中水的深度是多少? 如何在语文课堂教学中进行有效对话 电源电动势e=10v,内阻r=0.5欧姆,“8v16w”的灯泡恰好能正常发光,电动机正常,r0=1欧姆.求电路总电流...电源电动势e=10v,内阻r=0.5欧姆,“8v16w”的灯泡恰好能正常发光,电动机正常,r0=1欧姆.求电路总 一个长方体和圆柱体容器,长方体和圆柱底面积的比是3:2(从里面量),长方体容器中有1260升,水深6分米现将一部分水倒入容器,使得水的深度一样,这是容器中水的深度是多少? 如何有效地组织语文课堂教学 电源电动势e=10v,内阻r=0.5欧姆,“8v16w”的灯泡恰好能正常发光,电动机正常,r0=1欧姆.求电路总电流,电动机的机械功率P2 请注意求的问题 食堂有3种蔬菜共136千克,黄瓜比茄子多3千克,青菜比茄子多4千克,每种蔬菜几千克? 大小水池都未注满水,如果从小池抽水将大池灌满,则小池还剩10吨有大、小两个水池都未注满水,若从小池抽水将大池注满,则小池还剩水10吨,如果从大池抽水将小池注满,则大池还剩水20吨,已知 大小两个水池都没注满水.如果从小水池抽水来把大水池注满,则小水池还剩10吨水,如果从大水池抽水来把小水池注满,则大水池还剩水20吨水.已知大水池的容量是小水池的一又五分之一倍.两个 有一个装满水的容积为350立方米的水池,水池每小时涌出泉水40立方米,现用9台抽水机,每台每小时可抽水10立方米⑴水池内水量 y(立方米)与抽水时间x(时)之间的函数关系式,并说出x的取值 有大小两个水池都未注满水,如果从小池抽水将大池灌满,则小池还剩水有大、小两个水池都未注满水,若从小池抽水将大池注满,则小池还剩水10吨,如果从大池抽水将小池注满,则大池还剩水20吨 大小两个水池都未注满水.若从小水池中抽水将大水池注满,小水池还剩5吨水,若从大水池中抽水将小水池注满大水池还剩30吨水,已知大水池容量是小水池的1.5倍,问两水池共有几顿水 有甲、乙两个水池共贮水40立方米.如果甲水池在注入水4立方米,乙水池放出水8立方米,那么甲乙水池的注水量相等.问两个水池原来哥注水多少立方米? 如图所示的电路中,电源内阻不可忽略,电键S闭合前灯泡A、B、C均已发光.当电键S闭合时,A、B、C三个灯泡的亮度变化情况是(灯都不会烧坏)(  )A.A亮度不变,B变亮,C变暗 B.A变暗,B变 求计算铁的重量是圆铁 A3钢¢16*16 高度是40按铁的单价是6000元/T我还要算出铁要多少钱而已! 圆柱体高65厘米直径40厘米体积是多少 语文课堂教学中如何运用激励性评价 如图所示的电路中电源的内阻不可忽略当开关S闭合时电流表的示数为0.30A则当S断开时,电流表的示数可能是 A 0.28AB 0.42AC 0.52AD 0.18A要解析 如何进行现代课堂教学评价 语文教学评价语言(低年级) 如图所示电路图,设电源电压不变,灯泡电阻不变.闭合开关S在滑动变阻器滑片移动过程中,电流表最小示数为0.2A,电压表最大示数为4V,灯L的最大功率与最小功率之比为9:4,则(  )A、电源 绘制三相电机星—三角转换启动的主回路电路图. 初中语文课堂教学中如何运用激励性评价 等底等高的圆柱体、正方体、长方体的体积相比较,哪个大?请说明推理过程 怎样进行小学数学课堂教学评价 长方体的体积与圆柱体的体积有什么关系 等㡳等高的的圆柱体,正方体,长方体的体积相比较
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn