在这篇文章中,我们将为您详细介绍loadComplete和gridComplete事件之间有什么区别?的内容,并且讨论关于load和get的区别的相关问题。此外,我们还会涉及一些关于$parse,$i
在这篇文章中,我们将为您详细介绍loadComplete和gridComplete事件之间有什么区别?的内容,并且讨论关于load和get的区别的相关问题。此外,我们还会涉及一些关于$ parse,$ interpolate和$ compile服务之间有什么区别?、android – `com.example.**`和`com.example.** {*;}`之间有什么区别?、android.content.Loader.OnLoadCompleteListener的实例源码、android.media.SoundPool.OnLoadCompleteListener的实例源码的知识,以帮助您更全面地了解这个主题。
本文目录一览:- loadComplete和gridComplete事件之间有什么区别?(load和get的区别)
- $ parse,$ interpolate和$ compile服务之间有什么区别?
- android – `com.example.**`和`com.example.** {*;}`之间有什么区别?
- android.content.Loader.OnLoadCompleteListener的实例源码
- android.media.SoundPool.OnLoadCompleteListener的实例源码
loadComplete和gridComplete事件之间有什么区别?(load和get的区别)
gridComplete
:
在将所有数据加载到网格中并完成所有其他过程之后,将触发此事件。同样,事件会与datatype参数无关并在对分页等进行排序后触发。
loadComplete
:
每个服务器请求后立即执行此事件。数据来自响应的数据取决于数据类型网格参数
从该文档中,我了解到gridComplete
在绘制网格的末尾loadComplete
触发,并在jqGrid完成与后端的通信后触发。
因此,我想知道-为什么在演示中loadComplete
用于更改单元格的颜色而不使用gridComplete
?
答案1
小编典典我认为这个问题是jqGrid的许多用户提出的。因此,知道答案很有趣。
我个人更喜欢使用loadComplete
。如果您从我发布的所有示例中检查代码,则gridComplete
只有当原始海报在问题中将其发布时,您才能找到它,而我会修改一些代码。loadComplete
由于的优点loadComplete
和缺点,我更喜欢使用gridComplete
。
以下是优点loadComplete
:
- 如果要重新加载 整个网格主体 ,则将调用最后一个回调。例如,从服务器将页面加载到网格后。重要的是要理解,如果用户更改某些列的排序或设置过滤器或选择网格的另一页;网格主体将被重新加载。
loadComplete
具有data
代表本地数据的完整页面或从服务器加载的完整数据的参数。
另一方面,gridComplete
将从内部updatepager
调用(在jqGrid
4.4.4的当前版本中),该方法
将由delRowData
,addRowData
和clearGridData
方法调用;除了到addXmlData
和addJSONData
。这不是人们最想要的。
一个人的另一个缺点是gridComplete
可以查看是否_从哪里_调用了,因此将调用来检查addXmlData
)和addJSONData
的代码。如果使用和内部参数,则将填充服务器返回的完整数据。使用时可以看到;
从服务器加载第一页数据后,将调用 回调。此时,仅包含该页面的数据。在另一边 会被调用后,以后从服务器返回的所有数据进行处理和保存在本地的和。 __updatepager``gridComplete``loadonce: true``data``_index``loadonce:true
gridComplete
data``_index
loadComplete
data``_index
如果从服务器加载数据,而如果你不使用loadonce:true
选项,clearGridData
,addRowData
和delRowData
那么你可以使用gridComplete
的替代loadComplete
。
$ parse,$ interpolate和$ compile服务之间有什么区别?
是什么区别$parse
,$interpolate
和$compile
服务?对我来说,他们都做同样的事情:获取模板并将其编译为模板功能。
android – `com.example.**`和`com.example.** {*;}`之间有什么区别?
例如,每种情况会发生什么?
-keep class com.example.** -keep class com.example.** { *; }
解决方法
-keep class com.example.**
将所有类保留在com.example包中
-keep class com.example.** { *; }
在com.example包中保留所有内部类
android.content.Loader.OnLoadCompleteListener的实例源码
public static void loadPhoneContacts(Context context,final OnPhoneContactsLoadedListener listener) { final List<Bundle> phoneContacts = new ArrayList<>(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { listener.onPhoneContactsLoaded(phoneContacts); return; } final String[] PROJECTION = new String[]{ContactsContract.Data._ID,ContactsContract.Data.disPLAY_NAME,ContactsContract.Data.PHOTO_URI,ContactsContract.Data.LOOKUP_KEY,ContactsContract.CommonDataKinds.Im.DATA}; final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\"" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE + "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL + "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER + "\")"; CursorLoader mCursorLoader = new NotthrowCursorLoader(context,ContactsContract.Data.CONTENT_URI,PROJECTION,SELECTION,null,null); mCursorLoader.registerListener(0,new OnLoadCompleteListener<Cursor>() { @Override public void onLoadComplete(Loader<Cursor> arg0,Cursor cursor) { if (cursor != null) { while (cursor.movetoNext()) { Bundle contact = new Bundle(); contact.putInt("phoneid",cursor.getInt(cursor .getColumnIndex(ContactsContract.Data._ID))); contact.putString( "displayname",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.disPLAY_NAME))); contact.putString("photouri",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.PHOTO_URI))); contact.putString("lookup",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.LOOKUP_KEY))); contact.putString( "jid",cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } cursor.close(); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
public static void loadPhoneContacts(Context context,final List<Bundle> phoneContacts,final OnPhoneContactsLoadedListener listener) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { listener.onPhoneContactsLoaded(phoneContacts); return; } final String[] PROJECTION = new String[] { ContactsContract.Data._ID,ContactsContract.CommonDataKinds.Im.DATA }; final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\"" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE + "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL + "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER + "\")"; CursorLoader mCursorLoader = new CursorLoader(context,Cursor cursor) { if (cursor == null) { return; } while (cursor.movetoNext()) { Bundle contact = new Bundle(); contact.putInt("phoneid",cursor.getInt(cursor .getColumnIndex(ContactsContract.Data._ID))); contact.putString( "displayname",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.disPLAY_NAME))); contact.putString("photouri",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.PHOTO_URI))); contact.putString("lookup",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.LOOKUP_KEY))); contact.putString( "jid",cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } cursor.close(); } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
public static void loadPhoneContacts(Context context,cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } cursor.close(); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
/** * Runs a Loader synchronously and returns the result of the load. The loader will * be started,stopped,and destroyed by this method so it cannot be reused. * * @param loader The loader to run synchronously * @return The result from the loader */ public <T> T getLoaderResultSynchronously(final Loader<T> loader) { // The test thread blocks on this queue until the loader puts it's result in final ArrayBlockingQueue<T> queue = new ArrayBlockingQueue<T>(1); // This callback runs on the "main" thread and unblocks the test thread // when it puts the result into the blocking queue final OnLoadCompleteListener<T> listener = new OnLoadCompleteListener<T>() { @Override public void onLoadComplete(Loader<T> completedLoader,T data) { // Shut the loader down completedLoader.unregisterListener(this); completedLoader.stopLoading(); completedLoader.reset(); // Store the result,unblocking the test thread queue.add(data); } }; // This handler runs on the "main" thread of the process since AsyncTask // is documented as needing to run on the main thread and many Loaders use // AsyncTask final Handler mainThreadHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { loader.registerListener(0,listener); loader.startLoading(); } }; // Ask the main thread to start the loading process mainThreadHandler.sendEmptyMessage(0); // Block on the queue waiting for the result of the load to be inserted T result; while (true) { try { result = queue.take(); break; } catch (InterruptedException e) { throw new RuntimeException("waiting thread interrupted",e); } } return result; }
public static void loadPhoneContacts(Context context,cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } cursor.close(); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
public static void loadPhoneContacts(Context context,final OnPhoneContactsLoadedListener listener) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { listener.onPhoneContactsLoaded(phoneContacts); return; } final String[] PROJECTION = new String[]{ContactsContract.Data._ID,cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } cursor.close(); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
public static void loadPhoneContacts(Context context,final OnPhoneContactsLoadedListener listener) { final String[] PROJECTION = new String[] { ContactsContract.Data._ID,cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } cursor.close(); } }); try { mCursorLoader.startLoading(); } catch (RejectedExecutionException e) { if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }
public static void loadPhoneContacts(Context context,final OnPhoneContactsLoadedListener listener) { final List<Bundle> phoneContacts = new ArrayList<Bundle>(); final String[] PROJECTION = new String[] { ContactsContract.Data._ID,ContactsContract.Data.PHOTO_THUMBNAIL_URI,Cursor cursor) { while (cursor.movetoNext()) { Bundle contact = new Bundle(); contact.putInt("phoneid",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.disPLAY_NAME))); contact.putString( "photouri",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.PHOTO_THUMBNAIL_URI))); contact.putString("lookup",cursor.getString(cursor .getColumnIndex(ContactsContract.Data.LOOKUP_KEY))); contact.putString("jid",cursor.getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA))); phoneContacts.add(contact); } if (listener != null) { listener.onPhoneContactsLoaded(phoneContacts); } } }); mCursorLoader.startLoading(); }
android.media.SoundPool.OnLoadCompleteListener的实例源码
public void playSound(@RawRes final int resId) { if (this.mSoundSourceMap != null) { if (this.mSoundSourceMap.containsKey(Integer.valueOf(resId))) { play(((Integer) this.mSoundSourceMap.get(Integer.valueOf(resId))).intValue()); return; } this.mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { public void onLoadComplete(SoundPool soundPool,int sampleId,int status) { if (status == 0) { MQSoundPoolManager.this.mSoundSourceMap.put(Integer.valueOf(resId),Integer.valueOf(sampleId)); MQSoundPoolManager.this.play(sampleId); } } }); this.mSoundPool.load(this.mContext.getApplicationContext(),resId,1); } }
/** * Constructs and initializes a new Feedback controller. */ public FeedbackController(Context context) { mContext = context; mResources = context.getResources(); mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); mSoundPool = new SoundPool(NUMBER_OF_CHANNELS,DEFAULT_STREAM,1); mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { if (status == 0) { synchronized (mPostLoadplayables) { if (mPostLoadplayables.contains(sampleId)) { soundPool.play( sampleId,DEFAULT_VOLUME,1,DEFAULT_RATE); mPostLoadplayables.remove(Integer.valueOf(sampleId)); } } } } }); mHandler = new Handler(); mResourceIdToSoundMap.clear(); mResourceIdToVibrationPatternMap.clear(); MidiUtils.purgeMidiTempFiles(context); }
public void playSequence(final boolean loop) { int midiValue = 0; int veLocity = 0; int instrument = 0; String fileName = "dyn_" + midiValue + ".mid"; // MidiFile.writeNoteFile(midiValue,veLocity,fileName,MainActivity.config.tempo.getTempoEvent()); // MidiFile.writeSingleNoteFile(midiValue,instrument,MainActivity.config.tempo.getTempoEvent()); lastSequenceId = sequenceSoundPool.load(FileManager.getInstance().INTERNAL_PATH + "sequence.mid",1); sequenceSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { sequenceSoundPool.play(lastSequenceId,(loop ? -1 : 0),1); } }); try { mediaPlayer.reset(); mediaPlayer.setDataSource(FileManager.getInstance().EXTERNAL_PATH + "sequence.mid"); mediaPlayer.setLooping(loop); mediaPlayer.prepare(); mediaPlayer.start(); } catch (Exception e) { HLog.e("Media Player Failure"); e.printstacktrace(); } }
@Override public void playAuditory(int resId,final float rate,float volume) { if (!mAuditoryEnabled || resId == 0) return; final float adjustedVolume = volume * mVolumeAdjustment; int soundId = mSoundIds.get(resId); if (soundId != 0) { new EarconsPlayTask(mSoundPool,soundId,adjustedVolume,rate).execute(); } else { // The sound Could not be played from the cache. Start loading the sound into the // SoundPool for future use,and use a listener to play the sound ASAP. mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { if(sampleId !=0) { new EarconsPlayTask(mSoundPool,sampleId,rate).execute(); } } }); mSoundIds.put(resId,mSoundPool.load(mContext,1)); } }
public static void play(final int soundId,final PlaySoundCompletionListener playSoundCompletionListener) { if (sounds.get(soundId) != null) { int soundID1 = sounds.get(soundId); beginPlay(soundID1,playSoundCompletionListener); } else { synchronized (sounds) { final int soundIDOfPool = soundPool.load( BitherApplication.mContext,1); soundPool .setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool arg0,int arg1,int arg2) { if (arg1 == soundIDOfPool) { beginPlay(soundIDOfPool,playSoundCompletionListener); } } }); LogUtil.d("record","load:" + soundId); sounds.put(soundId,soundIDOfPool); } } }
private void setupSound() { spool = new SoundPool(1,AudioManager.STREAM_MUSIC,0); spool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { if(status==0) { if(sampleId==soundID) canPlaySound = true; } } }); soundID = spool.load(getApplicationContext(),R.raw.one_click,1); }
/** State where the UI becomes visible and the user can start interacting.*/ @Override protected void onResume() { super.onResume(); // log("onResume"); // Manage bubble popping sound. Use AudioManager.STREAM_MUSIC as stream type mAudioManager = (AudioManager) getSystemService(AUdio_SERVICE); mStreamVolume = (float) mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //divide by is the forward. mSoundPool = new SoundPool(10,0); //0 is currently not implemented by Google. mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { if (status == 0) { // log("onLoadComplete sound"); setupGestureDetector(); } } }); mSoundID = mSoundPool.load(this,R.raw.bubble_pop,1); //load the sound from res/raw/bubble_pop.wav }
public static void playViaSoundPool(Context context,final int resId) { // AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder(); // attrBuilder.setLegacyStreamType(AudioManager.STREAM_NOTIFICATION); // attrBuilder.setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT); // attrBuilder.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION); // // SoundPool.Builder spBuilder = new SoundPool.Builder(); // spBuilder.setMaxStreams(2); // spBuilder.setAudioAttributes(attrBuilder.build()); // // SoundPool sp21 = spBuilder.build(); int maxStreams = 5,streamType = AudioManager.STREAM_NOTIFICATION,srcQuality = 0; @SuppressWarnings("deprecation") final SoundPool sp20 = new SoundPool(maxStreams,streamType,srcQuality); int priority = 1; final int soundId = sp20.load(context,priority); // soundID : a soundID returned by the load() function // leftVolume : left volume value (range = 0.0 to 1.0),左声道 // rightVolume : right volume value (range = 0.0 to 1.0),右声道 // priority : stream priority (0 = lowest priority),优先级 // loop : loop mode (0 = no loop,-1 = loop forever),循环与否 // rate : playback rate (1.0 = normal playback,range 0.5 to 2.0),播放返回的速度 final float leftVolume = 1,rightVolume = 1; final int playPriority = 0,loop = 0; final float rate = 1.0F; sp20.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { int streamID = sp20.play(soundId,leftVolume,rightVolume,playPriority,loop,rate); if (streamID == 0 || status != 0) { LogUtil.e("Play sound " + resId + " fail."); } } }); }
@Override protected void onResume() { super.onResume(); // Manage bubble popping sound // Use AudioManager.STREAM_MUSIC as stream type mAudioManager = (AudioManager) getSystemService(AUdio_SERVICE); mStreamVolume = (float) mAudioManager .getStreamVolume(AudioManager.STREAM_MUSIC) / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // Make a new SoundPool,allowing up to 10 streams mSoundPool = new SoundPool(10,0); // Todo - Set a SoundPool OnLoadCompletedListener that calls // setupGestureDetector() mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { } }); // Todo - Load the sound from res/raw/bubble_pop.wav mSoundID = 0; }
@Override protected void onResume() { super.onResume(); // Manage bubble popping sound // Use AudioManager.STREAM_MUSIC as stream type mAudioManager = (AudioManager) getSystemService(AUdio_SERVICE); mStreamVolume = (float) mAudioManager .getStreamVolume(AudioManager.STREAM_MUSIC) / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // Todo - make a new SoundPool,allowing up to 10 streams mSoundPool = new SoundPool(10,0); // Todo - set a SoundPool OnLoadCompletedListener that calls setupGestureDetector() mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { if (0 == status) { setupGestureDetector(); } } }); // Todo - load the sound from res/raw/bubble_pop.wav mSoundID = mSoundPool.load(this,1); }
@Override protected void onResume() { super.onResume(); Log.d(TAG,"In onResume()..."); // Manage bubble popping sound // Use AudioManager.STREAM_MUSIC as stream type mAudioManager = (AudioManager) getSystemService(AUdio_SERVICE); mStreamVolume = (float) mAudioManager .getStreamVolume(AudioManager.STREAM_MUSIC) / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // Todo - make a new SoundPool,0); // Todo - set a SoundPool OnLoadCompletedListener that calls // setupGestureDetector() mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { Log.d(TAG,"SoundPool has finished loading sound " + sampleId); setupGestureDetector(); } }); // Todo - load the sound from res/raw/bubble_pop.wav mSoundID = mSoundPool.load(this,1); }
private void initializeSounds() { this.setVolumeControlStream(AudioManager.STREAM_MUSIC); // Load sounds mSoundPool = new SoundPool(10,0); mSoundPool.setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { mloaded = true; } }); mSoundConnect = mSoundPool.load(this,R.raw.proxima,1); mSounddisconnect = mSoundPool.load(this,R.raw.tejat,1); }
@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); mView = new GL2JNIView(getApplication()); mView.setonTouchListener(this); display display = getwindowManager().getDefaultdisplay(); display.getSize(size); this.setVolumeControlStream(AudioManager.STREAM_MUSIC); lib.setContext(this); lib.setSoundPool(new SoundPool(10,0)); lib.getSoundPool().setonLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool,int status) { lib.setLoaded(true); } }); lib.setSoundIDA(lib.getSoundPool().load(this,R.raw.a,1)); lib.setSoundIDB(lib.getSoundPool().load(this,R.raw.b,1)); lib.setSoundIDG(lib.getSoundPool().load(this,R.raw.g,1)); lib.setSoundIDCSharp(lib.getSoundPool().load(this,R.raw.cs,1)); lib.setSoundIDC(lib.getSoundPool().load(this,1)); lib.setSoundIDD(lib.getSoundPool().load(this,R.raw.d,1)); lib.setSoundIDE(lib.getSoundPool().load(this,R.raw.e,1)); lib.setSoundIDFSharp(lib.getSoundPool().load(this,R.raw.fs,1)); lib.setAudioManager((AudioManager) getSystemService(AUdio_SERVICE)); setContentView(mView); }
我们今天的关于loadComplete和gridComplete事件之间有什么区别?和load和get的区别的分享已经告一段落,感谢您的关注,如果您想了解更多关于$ parse,$ interpolate和$ compile服务之间有什么区别?、android – `com.example.**`和`com.example.** {*;}`之间有什么区别?、android.content.Loader.OnLoadCompleteListener的实例源码、android.media.SoundPool.OnLoadCompleteListener的实例源码的相关信息,请在本站查询。
本文标签: