barriers / 阅读 / 详情

android addpreferencesfromintent没有

2023-07-17 11:52:31
共1条回复
meira

  addPreferencesFromResource(R.xml.setting_preference);

  因为最近的项目我都要把程序的资源文件都放到另一个apk中。而上面这个方法中只能传本地的或系统的资源id。那么我就找到了类似的方法:addPreferencesFromIntent(Intent

intent);百度goolge了一下发现都是没有这个方法的例子只有搜索google的里面的api:

  public

void addPreferencesFromIntent (Intent intent)

  Since: API Level 1

  This method is deprecated.

This function is

not relevant for a modern fragment-based PreferenceActivity.

  Adds

preferences from activities that match the given Intent.

  Parameters

  intent

  The Intent to query

activities.

  这样介绍就很简单了,只是让我们去查询activities。没有说明xml是什么给的。没办法我只能去看源码,看他们是什么解析Intent的,那我就给出一个可用的intent。

  因为是继承PreferenceFragment的,我就从源码找到frameworks/base/core/java/android/preference/PreferenceFragment.java这个类:

  view

plaincopy to clipboardprint?

  <span style="white-space:pre"> </span>public void addPreferencesFromIntent(Intent intent) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())); }

  <span style="white-space:pre"> </span>public void addPreferencesFromIntent(Intent intent) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())); }

然后这里又用到了mPreferenceManager.inflateFromIntentt(intent,

getPreferenceScreen()),那么在找到这个类frameworks/base/core/java/android/preference/PreferenceManager.java:

  view

plaincopy to clipboardprint?

  <span style="white-space:pre"> </span>PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { final List<ResolveInfo> activities = queryIntentActivities(queryIntent); final HashSet<String> inflatedRes = new HashSet<String>(); for (int i = activities.size() - 1; i >= 0; i--) { final ActivityInfo activityInfo = activities.get(i).activityInfo; final Bundle metaData = activityInfo.metaData; if ((metaData == null) || !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue; } // Need to concat the package with res ID since the same res ID // can be re-used across contexts final String uniqueResId = activityInfo.packageName + ":" + activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflatedRes.contains(uniqueResId)) { inflatedRes.add(uniqueResId); final Context context; try { context = mContext.createPackageContext(activityInfo.packageName, 0); } catch (NameNotFoundException e) { Log.w(TAG, "Could not create context for " + activityInfo.packageName + ": " + Log.getStackTraceString(e)); continue; } final PreferenceInflater inflater = new PreferenceInflater(context, this); final XmlResourceParser parser = activityInfo.loadXmlMetaData(context .getPackageManager(), METADATA_KEY_PREFERENCES); rootPreferences = (PreferenceScreen) inflater .inflate(parser, rootPreferences, true); parser.close(); } } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; }

  <span style="white-space:pre"> </span>PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { final List<ResolveInfo> activities = queryIntentActivities(queryIntent); final HashSet<String> inflatedRes = new HashSet<String>(); for (int i = activities.size() - 1; i >= 0; i--) { final ActivityInfo activityInfo = activities.get(i).activityInfo; final Bundle metaData = activityInfo.metaData; if ((metaData == null) || !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue; } // Need to concat the package with res ID since the same res ID // can be re-used across contexts final String uniqueResId = activityInfo.packageName + ":" + activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflatedRes.contains(uniqueResId)) { inflatedRes.add(uniqueResId); final Context context; try { context = mContext.createPackageContext(activityInfo.packageName, 0); } catch (NameNotFoundException e) { Log.w(TAG, "Could not create context for " + activityInfo.packageName + ": " + Log.getStackTraceString(e)); continue; } final PreferenceInflater inflater = new PreferenceInflater(context, this); final XmlResourceParser parser = activityInfo.loadXmlMetaData(context .getPackageManager(), METADATA_KEY_PREFERENCES); rootPreferences = (PreferenceScreen) inflater .inflate(parser, rootPreferences, true); parser.close(); } } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; }

从上面的代码我们就知道要从intent中获取一组activity。通过 activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES)我们知道就是从activity拿的<meta-data

这些数据,那么我们在AndroidManifest.xml中eclipse提示的<meta-data只有三个属性:

  那么我么就不难得出结论<meta-data 中的nane就是METADATA_KEY_PREFERENCES,而xml就是resource。

  接下来还有一个问题就是METADATA_KEY_PREFERENCES的值是多少。搜一下在PreferenceManager.java中有如下定义:

  view

plaincopy to clipboardprint?

  public static final String METADATA_KEY_PREFERENCES = "android.preference";

  public static final String METADATA_KEY_PREFERENCES = "android.preference";

知道了以上原理我们来验证一下:

  新建一个工程,在里面的activity标签中加<meta-data,如下:

  view

plaincopy to clipboardprint?

  <span style="white-space:pre"> </span><activity android:name="com.winca.style.defaultskin.RadioReadSettingXMLActivity" android:icon="@drawable/radio" android:label="@string/radio_app_name" > <meta-data android:name="android.preference" android:resource="@xml/setting_preference"/> </activity>

  <span style="white-space:pre"> </span><activity android:name="com.winca.style.defaultskin.RadioReadSettingXMLActivity" android:icon="@drawable/radio" android:label="@string/radio_app_name" > <meta-data android:name="android.preference" android:resource="@xml/setting_preference"/> </activity>

这个xml就是从我们程序中拷贝多来放到新建的工程中的。

  原来我们工程用的addPreferencesFromResource(R.xml.setting_preference);这语句,我们这样替换:

  view

plaincopy to clipboardprint?

  <pre name="code" class="java"><span style="white-space:pre"> </span>Intent xmlIntent = new Intent(); ComponentName component = new ComponentName("com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(component); addPreferencesFromIntent(xmlIntent);

  <pre name="code" class="java"><span style="white-space:pre"> </span>Intent xmlIntent = new Intent(); ComponentName component = new ComponentName("com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(component); addPreferencesFromIntent(xmlIntent);

运行一下,正常显示xml里面的。问题解决。

相关推荐

PreferenceFragment去完成设置页面

大多数时候我们都是这样去使用SharedPreferences 在app设置页面的开发中也会用到对设置项的保存,我们也会用到SharedPreferences去保存这些设置项,Android官方提供了更为简单针对设置页面使用SharedPreferences方法,那就是PreferenceActivity和PreferenceFragment. 下面来说下如何使用. PreferenceActivity主要针对3.0以前的版本,PreferenceFragment则更为灵活,其实使用方法上面两者大致一样,所以PreferenceActivity就不展开讲解,直接来看PreferenceFragment的使用 一般来说Fragment会要求去关联一个布局的layout, 但是在PreferenceFragment则不需要这样做,我们需要去自定义一个xml加入首选项(首选项就是配置项,官方称为首选项). xml根节点必须是一个PreferenceScreen元素. PreferenceScreen里面的子项都作为一个独立的控件显示在界面里,同时还具备保存属性. 显示效果如下 以上只展示了CheckBoxPreference和ListPreference,还有其它很多Preference控件,具体可以查阅官方文档有关Preference的字类. 如果设置项目过多,我们可以进行分类展示,有如下两种方式可以来实现. 加入PreferenceCategory的属性可以进行标题的划分. 使用PreferenceCategory属性可以划分子屏幕 有时候我们的设置项目并不是保存一个配置项,而是去跳转到一个新的画面. 我们可以使用如下配置来使得首选项跳转一个网页 当然你也可以配置显式的intent进行跳转,具体可以参见官方文档. 可以设置默认值给Preference控件 在进入设置页面可以调用 对默认值进行初始化应用, 这个接口最常用的地方就是去恢复设置. 通常还有种需求是点击一个首选项跳转到另外一个屏幕,当然这个功能也可以通过PreferenceScreen来完成,但是使用PreferenceScreen不能兼容平板的情况就像下面这样 如果要实现这种效果就要使用到hearders android:fragment用来标记点击后跳转的Fragment,extra用来传递参数,可以在Fragment中通过getArguments()来获取传递过来的bundle数据, 这个数据最大的作用就是用来在同一个preference fragment中加载不同的preference xml. 如果要显示这个标头文件的内容需要去重写onBuildHeaders方法. preference-headers这个标签只能支持3.0以后的版本,如果要兼容3.0以前的版本需要另外在写个xml作为兼容 再以如下方式加载 onBuildHeaders这个回调只会在Build.VERSION_CODES.HONEYCOMB(3.0系统)以上的版本调用。 另外我们必须要注意的一点,目前首选项不会再您调用registerOnSharedPreferenceChangeListener()时存储对监听器的强引用。但是,您必须存储对监听器的强引用,否则它将很容易被当作垃圾回收。 上面就是关于如何使用系统提供具有Preference功能的UI控件来打造一个设置界面. 更多详细关于自定义Preference等可以参考官方文档 https://developer.android.com/guide/topics/ui/settings
2023-07-17 11:31:231

怎么样得到引用的类属于那一个JAR包中的

一般根据引用的包名去查找 。。。。。。。。。。。。
2023-07-17 11:31:311

Android蓝牙协议-蓝牙配对与连接

蓝牙设备在连接前,会先检查设备是否已经配对过,如果没有则先配对,配对完成后,再开始连接。 蓝牙连接开始于设备列表 DeviceListPreferenceFragment的onPreferenceTreeClick方法。 DeviceListPreferenceFragment是蓝牙设备列表,点击其中一个蓝牙设备,开始蓝牙的连接过程。 调用onDevicePreferenceClick方法,接着调用BluetoothDevicePreference的onClicked方法,开始连接,以及连接前的状态检测。 获取mCachedDevice的绑定状态, pair方法会调用CachedBluetoothDevice.startPairing,启动配对 createBond调用BluetoothDevice.createBond方法,BluetoothDevice.createBond接着调用IBluetooth.createBond方法,下面会调用蓝牙远程服务。 和蓝牙扫描一样,实现IBluetooth接口的类是AdapterServiceBinder, AdapterServiceBinder实现IBluetooth.Stub接口,并且是AdapterService的私有内部类, AdapterServiceBinder接受事件,都会转交AdapterService处理 ,所以IBluetooth.createBond方法会调用AdapterService.createBond方法。 createBond方法会检查一下远程设备属性信息,再次取消蓝牙扫描任务,将配对任务转交mBondStateMachine,由状态机处理该信息。 BondStateMachine状态机的初始状态是StableState,所以BondStateMachine.CREATE_BOND由StableState处理,StableState在processMessage中调用BondStateMachine.createBond方法 createBondNative方法实现com_android_bluetooth_btservice_AdapterService.cpp中
2023-07-17 11:32:081

如何在Fragment中使用PreferenceFragment

public FragmentSetup() { // Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_setup, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Load the preferences from an XML resource
2023-07-17 11:32:201

如何查阅这个东西:preferencefragment。我不要解释,我只要怎么能查出来,它是android3.0后加上的。

方法一:将这个源码jar文件导入到eclipse项目,ctrl+鼠标点击,就能看到这个类的说明了。另一种方法是打开3.0以上的Android API文档选择Reference---往下拉找到android.preference
2023-07-17 11:32:281

android PreferenceFragment 切换语言crash

切换语言时fragment初始化失败,之前遇到过这个BUG。应该是fragment内容已经被释放,但是activity里面的fragment对象还存在。所以你再初始化的时候要判断一下Fragment的内容是否正常。isDetached()这个函数 好像。。记不太清了
2023-07-17 11:32:351

如何在fragment中使用preferencefragment

public FragmentSetup() { // Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_setup, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Load the preferences from an XML resource}
2023-07-17 11:32:421

怎样实现从一个frgment跳转到另一个preferencefragment

不行的,fragment是基于activity的,我用了后的理解是,它就像是相当于activity布局中的一个View,一个activity可以有多个View(fragment)。你要实现用intent的跳转,必须是要通过activity跳activity的,new Intent的时候,里面两个参数很明确的,一个是第一个参数是Context,fragemnt显然不行。
2023-07-17 11:32:491

在fragment怎么用getlayoutinflater

用了一个FragmentActivity作为主界面,包含了三个Fragment,实现了一个滑动的效果。现在我想讲其中一个Fragment,作为一个设置的界面,所以我想使用PreferenceFragment来实现。如下代码:一、FragmentActivity代码:Java code?package huahua.viewpager;import java.util.ArrayList;import android.os.Bundle;import android.preference.PreferenceFragment;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.PagerTabStrip;import android.support.v4.view.PagerTitleStrip;import android.support.v4.view.ViewPager;import android.util.Log;public class MainActivity extends FragmentActivity { private ViewPager m_vp; private fragment1 mfragment1; private fragment2 mfragment2; private fragment3 mfragment3; private ArrayList<Fragment> fragmentList;//页面列表 ArrayList<String> titleList = new ArrayList<String>();//标题列表 //通过pagerTabStrip可以设置标题的属性 private PagerTabStrip pagerTabStrip; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v("huahua", "MainActivity-->onCreate()"); m_vp = (ViewPager)findViewById(R.id.viewpager); pagerTabStrip=(PagerTabStrip) findViewById(R.id.pagertab); mfragment1 = new fragment1(); mfragment2 = new fragment2(); mfragment3 = new fragment3(); fragmentList = new ArrayList<Fragment>(); fragmentList.add(mfragment1); fragmentList.add(mfragment2); fragmentList.add(mfragment3); titleList.add("第一页 "); titleList.add("第二页"); titleList.add("第三页 "); m_vp.setOffscreenPageLimit(0); m_vp.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager())); //设置下划线的颜色 pagerTabStrip.setTabIndicatorColor(getResources().getColor(android.R.color.holo_green_dark)); //设置背景的颜色 pagerTabStrip.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_dark)); } public class MyViewPagerAdapter extends FragmentPagerAdapter{ public MyViewPagerAdapter(FragmentManager fm) { super(fm); // TODO Auto-generated constructor stub } @Override public Fragment getItem(int arg0) { return fragmentList.get(arg0); } @Override public int getCount() { return fragmentList.size(); } @Override public CharSequence getPageTitle(int position) { // TODO Auto-generated method stub return titleList.get(position); } }}这个是其中的一个Fragment,我想在这个Fragment页面上实现PreferenceFragment的效果,但是这样做行不通,Java code?1getActivity().getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();这行代码以及下面的PrefsFragement静态类都是我期望实现的。真的不知道如何解决了。求教各位,万分感激。这个Fragment和PreferenceFragment并不是继承关系,这里的Fragment使用的是android.support.v4.app.Fragment下面的Fragment。Java code?package huahua.viewpager;import android.os.Bundle;import android.preference.PreferenceFragment;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class fragment3 extends Fragment{ private View mMainView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v("huahua", "fragment3-->onCreate()"); LayoutInflater inflater = getActivity().getLayoutInflater(); mMainView = inflater.inflate(R.layout.fragment3, (ViewGroup)getActivity().findViewById(R.id.viewpager), false); getActivity().getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();//希望添加的 } public static class PrefsFragement extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.v("huahua", "fragment3-->onCreateView()"); ViewGroup p = (ViewGroup) mMainView.getParent(); if (p != null) { p.removeAllViewsInLayout(); Log.v("huahua", "fragment3-->移除已存在的View"); } return mMainView; }}
2023-07-17 11:32:571

android preferencescreen走哪个intent

  addPreferencesFromResource(R.xml.setting_preference);   因为最近的项目我都要把程序的资源文件都放到另一个apk中。而上面这个方法中只能传本地的或系统的资源id。那么我就找到了类似的方法:addPreferencesFromIntent(Intent intent);百度goolge了一下发现都是没有这个方法的例子只有搜索google的里面的api:   public void addPreferencesFromIntent (Intent intent)   Since: API Level 1   This method is deprecated. This function is not relevant for a modern fragment-based PreferenceActivity.   Adds preferences from activities that match the given Intent.   Parameters   intent   The Intent to query activities.   这样介绍就很简单了,只是让我们去查询activities。没有说明xml是什么给的。没办法我只能去看源码,看他们是什么解析Intent的,那我就给出一个可用的intent。   因为是继承PreferenceFragment的,我就从源码找到frameworks/base/core/java/android/preference/PreferenceFragment.java这个类:   view plaincopy to clipboardprint?   <span style="white-space:pre"> </span>public void addPreferencesFromIntent(Intent intent) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())); }   <span style="white-space:pre"> </span>public void addPreferencesFromIntent(Intent intent) { requirePreferenceManager(); setPreferenceScreen(mPreferenceManager.inflateFromIntent(intent, getPreferenceScreen())); } 然后这里又用到了mPreferenceManager.inflateFromIntentt(intent, getPreferenceScreen()),那么在找到这个类frameworks/base/core/java/android/preference/PreferenceManager.java:   view plaincopy to clipboardprint?   <span style="white-space:pre"> </span>PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { final List<ResolveInfo> activities = queryIntentActivities(queryIntent); final HashSet<String> inflatedRes = new HashSet<String>(); for (int i = activities.size() - 1; i >= 0; i--) { final ActivityInfo activityInfo = activities.get(i).activityInfo; final Bundle metaData = activityInfo.metaData; if ((metaData == null) !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue; } // Need to concat the package with res ID since the same res ID // can be re-used across contexts final String uniqueResId = activityInfo.packageName + ":" + activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflatedRes.contains(uniqueResId)) { inflatedRes.add(uniqueResId); final Context context; try { context = mContext.createPackageContext(activityInfo.packageName, 0); } catch (NameNotFoundException e) { Log.w(TAG, "Could not create context for " + activityInfo.packageName + ": " + Log.getStackTraceString(e)); continue; } final PreferenceInflater inflater = new PreferenceInflater(context, this); final XmlResourceParser parser = activityInfo.loadXmlMetaData(context .getPackageManager(), METADATA_KEY_PREFERENCES); rootPreferences = (PreferenceScreen) inflater .inflate(parser, rootPreferences, true); parser.close(); } } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; }   <span style="white-space:pre"> </span>PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { final List<ResolveInfo> activities = queryIntentActivities(queryIntent); final HashSet<String> inflatedRes = new HashSet<String>(); for (int i = activities.size() - 1; i >= 0; i--) { final ActivityInfo activityInfo = activities.get(i).activityInfo; final Bundle metaData = activityInfo.metaData; if ((metaData == null) !metaData.containsKey(METADATA_KEY_PREFERENCES)) { continue; } // Need to concat the package with res ID since the same res ID // can be re-used across contexts final String uniqueResId = activityInfo.packageName + ":" + activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES); if (!inflatedRes.contains(uniqueResId)) { inflatedRes.add(uniqueResId); final Context context; try { context = mContext.createPackageContext(activityInfo.packageName, 0); } catch (NameNotFoundException e) { Log.w(TAG, "Could not create context for " + activityInfo.packageName + ": " + Log.getStackTraceString(e)); continue; } final PreferenceInflater inflater = new PreferenceInflater(context, this); final XmlResourceParser parser = activityInfo.loadXmlMetaData(context .getPackageManager(), METADATA_KEY_PREFERENCES); rootPreferences = (PreferenceScreen) inflater .inflate(parser, rootPreferences, true); parser.close(); } } rootPreferences.onAttachedToHierarchy(this); return rootPreferences; } 从上面的代码我们就知道要从intent中获取一组activity。通过 activityInfo.metaData.getInt(METADATA_KEY_PREFERENCES)我们知道就是从activity拿的<meta-data 这些数据,那么我们在AndroidManifest.xml中eclipse提示的<meta-data只有三个属性:   那么我么就不难得出结论<meta-data 中的nane就是METADATA_KEY_PREFERENCES,而xml就是resource。   接下来还有一个问题就是METADATA_KEY_PREFERENCES的值是多少。搜一下在PreferenceManager.java中有如下定义:   view plaincopy to clipboardprint?   public static final String METADATA_KEY_PREFERENCES = "android.preference";   public static final String METADATA_KEY_PREFERENCES = "android.preference"; 知道了以上原理我们来验证一下:   新建一个工程,在里面的activity标签中加<meta-data,如下:   view plaincopy to clipboardprint?   <span style="white-space:pre"> </span><activity android:name="com.winca.style.defaultskin.RadioReadSettingXMLActivity" android:icon="@drawable/radio" android:label="@string/radio_app_name" > <meta-data android:name="android.preference" android:resource="@xml/setting_preference"/> </activity>   <span style="white-space:pre"> </span><activity android:name="com.winca.style.defaultskin.RadioReadSettingXMLActivity" android:icon="@drawable/radio" android:label="@string/radio_app_name" > <meta-data android:name="android.preference" android:resource="@xml/setting_preference"/> </activity> 这个xml就是从我们程序中拷贝多来放到新建的工程中的。   原来我们工程用的addPreferencesFromResource(R.xml.setting_preference);这语句,我们这样替换:   view plaincopy to clipboardprint?   <pre name="code" class="java"><span style="white-space:pre"> </span>Intent xmlIntent = new Intent(); ComponentName component = new ComponentName("com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(component); addPreferencesFromIntent(xmlIntent);   <pre name="code" class="java"><span style="white-space:pre"> </span>Intent xmlIntent = new Intent(); ComponentName component = new ComponentName("com.winca.style.defaultskin","com.winca.style.defaultskin.RadioReadSettingXMLActivity"); xmlIntent.setComponent(component); addPreferencesFromIntent(xmlIntent); 运行一下,正常显示xml里面的。问题解决。
2023-07-17 11:33:051

什么代码能直接屏蔽所有系统通知

如果是手机系统的话,在设置里有通知选项,可以在通知里把你不想要接收的App的通知功能关掉。
2023-07-17 11:33:242

activity和fragment的生命周期状态各有哪些?状态之间如何变换

Fragment的生命周期初探:因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。每当创建一个Fragment时,首先添加以下三个回调方法:onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。 onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。 onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。将Fragment加载到Activity当中有两种方式:方式一:添加Fragment到Activity的布局文件当中 方式二:在Activity的代码中动态添加Fragment(荐)第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。
2023-07-17 11:33:321

android 怎么在自定义控件中获取控件所在fragment的实例

在构造方法,或者set方法等注入fragment,类似很多自定义控件使用Context一样。可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment)。
2023-07-17 11:33:401

andriod的PreferenceFragment类的addPreferencesFromResource不管用

的起薪和平均水平是多少
2023-07-17 11:33:471

Android Support Library解释

tags: android support library Google官方 开发者网站 有一篇文章专门解释了这一系列Support Library,网络上的很多文章都翻译自它。文章地址在 这里 。 下面是我自己的一些总结。 最主要的原因就是: 为了能在低版本的Android系统上使用高版本的SDK才具有的新功能、新特性 。比如,Fragment,ActionBar、Material Design风格等。 Google把这些高版本SDK才具有的新特性打包进Support Library,当开发者想使用这些新特性,又需要兼容老版本Android系统时,就可以引入Support Library。当然,这些打包进Support Library的新特性,全部都被完整的包含在了最新的Android SDK中。所以如果开发者的App仅支持最新系统,也可以不引入Support Library。 Google为了使开发者可以方便的引入Support Library,把它们做成了依赖包的形式,通过Gradle可以很方便的引入,例如: 除了最主要的原因,还有其他几点原因,可以参考Google 官方文档 对此的解释。 Android Support Library只是一个名称,并不是一个真正的library,它由多个具体的library集合而成。每个单独的library都包含一些新特性,可以支持不同版本的Android系统,可以被单独引入。 一般来说,每个Support Library包含的新特性都是不同的,它们交叉互补,以插件化的形式提供对低版本系统的支持。 支持Android 1.6(API level 4)及以上。它包含了最多的新特性,典型的有: 引入: 支持Android 2.1(API level 7)及以上。由一系列独立的v7包组成,可以分别引入。 依赖 v4 Support Library 。现在在Android Studio中新建一个工程,默认就会引入这个library。而它又依赖v4 Support Library,所以v4 Support Library也会被默认引入工程。 这个库主要的作用就是提供对 Action Bar 的支持。 使用: 提供了 CardView 控件,一种Material Design风格的卡片形控件。 使用: 提供了 GridLayout 类,一种网格布局控件,与LinearLayout,RelativeLayout同级。 使用: 官方文档的解释是:用来控制多媒体流的分发。但是实际中基本很少用到,有兴趣的可以参考 官方文档 。 提供了 Palete 类,可以从一张图片中提取出它的主色调。 使用: 提供了 RecyclerView 类,一个类似ListView,但是比ListVIew性能更好的控件。一般用来展示大量数据,可以完全替代ListView。 使用: 提供了一系列API,用于支持创建Material Design风格的首选项页面。官方有一篇 指导文档 ,但是感觉虽然方便了开发,但是灵活性和可定制性不高。 使用: 它是Android官方用来方便开发者在应用中实现 Android Material Design 风格的UI而提供的支持库,里面有很多Android官方提供的Material Design风格的 轮子 。主要的轮子有: Google开发者博客上还有一个 视频 ,专门介绍了这个库。 使用: 提供支持多个dex文件的功能,解决方法65536的限制。 使用: 支持Android 2.2(API level 8)及以上。 感觉一般的应用级开发用不到(也可能是我太弱鸡了),具体还是参考 官方文档 吧。 支持Android 3.2(API level 13)及以上。这个library是为在平板上使用 Fragment 而设计的,现在应该几乎用不到了。 使用: 主要是添加了首选项Fragment类- PreferenceFragment 和首选项接口- PreferenceFragment.OnPreferenceDisplayDialogCallback , PreferenceFragment.OnPreferenceStartFragmentCallback , PreferenceFragment.OnPreferenceStartScreenCallback 。与 v7 Preference Support Library 搭配使用,参见 官方文档 。 使用: 提供对注解的支持。 使用: 提供了一些 API ,用于添加和管理自定义tab。 使用: 添加了百分比布局控件,如 PercentFrameLayout , PercentRelativeLayout 。 使用: 提供了在电视平台上,构建首选项页面的接口,作用类似于 v7 Preference Support Library 与 v14 Preference Support Library 。 使用: 提供了在电视平台上,用于构建用户界面的一系列重要控件。以下是一些关键的类: 使用: 在电视平台上,添加了用于做内容推荐的一系列 API 。 使用:
2023-07-17 11:33:541

什么是英文常用单词?

最常用英语单词有accent 加重、accurate 精确、acquire 获得、action 操作,运算、adjust 调整、ambient light 环境光、angle 角度、anti-aliased 平滑处理 arbitrary 任意的等。1常用英语单词1000Aaccent 加重accurate 精确acquire 获得action 操作,运算adjust 调整ambient light 环境光angle 角度anti-aliased 平滑处理arbitrary 任意的arrange 排列arrow 箭头artistic 艺术的,美术的Bbalance 平衡bar 条,栏base 基准batch 批量,成批bevel 使成斜角,斜切bilinear 双线性插值bitmap 位图,点阵图blend 混合,调和blur 模糊bold 加粗border 边界,边框brightness 亮度brush 画笔,笔形build 建造,创立burn 焦化,烧黑button 按钮Ccache 快速存储器calculation 计算calibrate 校准,校验canvas 画布carve 镌刻cascade 层叠chalk 粉笔,作记号channel 通道,频道charcoal 炭笔画chrome 铬黄,铬合金classic 经典的click (单)击(鼠标)clipboard 剪贴版clone 复制cloud 云彩command 命令content 内容continue 连续的,持续的contour 轮廓线,周线contract 收缩,缩小contrast 反差,对比coordinate 协调,协作craquelue 裂纹crayon 蜡笔crop 剪裁crystallize 水晶curl 螺旋状物,卷曲的current 当前的cursor 光标,游标curve 曲线custom 自定义Ddarken 较黑的,使变黑daubs 涂抹define 定义design 设计destination 目标,对象difference 区别,差异diffuse 散乱扩散displace 转移distort 扭曲document 文档,文件dodge 加亮drop shadow 投影duotone 双色调duplicate 复制dust 灰尘,尘土Eedge 边界effect 效果作用embed 嵌入emboss 浮雕enlarge 放大equalize 平均化expand 扩充,扩展export 输出extrude 突出eyedropper 吸管Ffacet 刻面feather 晕开,羽化fill 填充flare 张开,闪耀flatten 变平flip 翻转fragment 碎片fresco 壁画Ggamut 整个领域general 普通的glass 玻璃杯glow 发光gradient 渐变grain 纹理graphics 图形grayscale 灰阶,灰度图grid 坐标格子group 群,组grow 成长guide 参考,参考线Hhalftone 半色调histogram 柱状图horizontal 水平hue 色相Iicon 图标image 图像import 输入index 索引Inner 内部的input 输入intensity 亮度inverse 相反invert 反转,反相Kkeyboard 键盘kilometre 千米,公里Llens 凹凸透镜,焦距level 级别,色阶light 光线location 定位Mmagic 有魔法的magic wand 魔棒mask 遮罩,掩膜maximum 最大值memory 记忆,内存merge 合并,融合minimum 最小值mode 模式,方式modify 修改,改变monitor 显示器,监视器monochrome 单色的mosaic 马塞克motion 运动multichannel 多通道模式Nnegative 负片,负像noise 噪音,糙点numeric 数字化的;分数Ooffset 位移,偏移option 选项ornament 装饰outline 轮廓,外形Ppalette 调色板parameter 参数,参变量paste 粘贴pastel 彩色粉笔,蜡笔画patchwork 补教,式样path 路径pattern 图案perspective 透视pinch 极化,凹陷或突起plug-ins 插件(滤镜)pointillize 乱点描述polar coordinates 极坐标poster 招贴画posterize 色调分离preference 偏好设定preview 预览previous 前一个pseudo 假的purge 消除Rradial 圆形range 范围,领域relief 救济,援救render 渲染,粉刷,上色reticulation 网状物revert 还原,复原ripple 涟漪,波纹rotate 旋转rough 粗略ruler 标尺Ssaturation 色彩饱和度scale 缩放scratch 暂时,临时screen 屏幕seam 缝,接缝selection 选择,工作区selective 精心挑选的separation 分离,分开sharpen 锐化shear 扭曲变形similar 相似的sketch 草图,画稿skew 偏斜的smart 灵活的,精巧的smooth 平滑的smudge 玷污,污点snapshot 快照solarize 中途曝光spatter 溅,洒落sponge 海绵spray 喷,喷涂stain 着色,染色stamp 盖章,盖印status 状态,状况stereo 立体声stroke 笔划,打击swirl 漩涡,卷状物Ttexture 质地,纹理threshold 两阶调化tile 平铺,窗口并联trace 跟踪,镂边trail 痕迹,足迹transform 转变,变形transparency 透明度twirl 卷曲,快速旋转Uultimate 最终的uncommon 罕见,非凡的units 单位,单元Vvertex 顶点,最高点vertical 垂直的video 视频,电视view 视图,显示方式virus 病毒visible 可见的,明显的visual 视觉的vogue 流行,时尚volume (磁盘)容量vortex 漩涡Wwatercolor 水彩watermark 水印wave 波纹,波动welder 焊接workstation 工作站wrinkle 皱纹Zzero 零zigzag 锯齿zoom in 放大zoom out 缩小2背英语单词的最好方法第一步,准备工作:准备若干张小纸条,数目由您要记忆的单词数来决定,用于写您要记忆的英语单词,原则上每张纸条只写一个单词;准备好30个小纸盒子,第1个盒子存放今天学习与复习的单词,第2个盒子存放明天复习的单词... ...,依次类推,第30个盒子存放第30天复习的单词。第二步,添加新单词:每天把220个新单词写成条子放在盒子1中(如果您想多学可以多放点,想少学点也可以少放点),同时把盒子2的单词放到盒子1中,把盒子3的单词放在盒子2中... ...,依次类推。第三步,学习与复习:开始学习盒子1中的单词,同时根据自己的遗忘参数值决定刚学过的单词放在2 -- 30中的哪个盒子中。根据自己复习效果调整自己的遗忘参数值。最好的办法就是应用“艾宾浩斯--满爱镇微分记忆算法模型”。该模式真正做到记忆最轻松,复习次数最少,每次复习花费的时间最少。该模型可以自动适应于您的遗忘规律,对每个人的每个记忆项,动态维护一套遗忘参数,并且是在记忆的过程中进行动态维护,在最需要复习的时候提醒您进行复习,直到记忆熟悉为止。采用该模型进行记忆,比普通传统的方法更轻松、更快捷、更牢固,您根本不需要操心什么时候学习新单词,什么时候复习应该复习的单词,一切工作由系统自动完成,是传统模式无法比拟的。
2023-07-17 11:34:011

Android系统框架参数——求大神注释

这。。这 我估计只有系统开发者可以看懂
2023-07-17 11:34:092

android6.0在fragment中相机权限怎么动态获取

你要在某些地方把图片的地址保存起来,比如数据库,比如sharedpreference。切换的时候重新读取。
2023-07-17 11:34:431

sharedpreference无法读取按钮状态

this.getActivity()会可能返回null,所以你不能这样做。你需要放在onAttach(Activityactivity)里面进行preferences的初始化。
2023-07-17 11:34:501

高手指教一下华为路由器的路由配置命令?

路由器静态路由配置命令4.6.1 ip route配置或删除静态路由。[ no ] ip route ip-address{ mask | mask-length } { interfacce-name| gateway-address } [ preference preference-value] [ reject | blackhole ]【参数说明】ip-address和mask为目的IP地址和掩码,点分十进制格式,由于要求掩码32位中‘1"必须是连续的,因此点分十进制格式的掩码可以用掩码长度mask-length来代替,掩码长度为掩码中连续‘1"的位数。interfacce-name指定该路由的发送接口名,gateway-address为该路由的下一跳IP地址(点分十进制格式)。preference-value为该路由的优先级别,范围0~255。reject指明为不可达路由。blackhole指明为黑洞路由。【缺省情况】系统缺省可以获取到去往与路由器相连子网的子网路由。在配置静态路由时如果不指定优先级,则缺省为60。如果没有指明reject或blackhole,则缺省为可达路由。【命令模式】全局配置模式【使用指南】配置静态路由的注意事项:当目的IP地址和掩码均为0.0.0.0时,配置的缺省路由,即当查找路由表失败后,根据缺省路由进行包的转发。对优先级的不同配置,可以灵活应用路由管理策略,如配置到达相同目的地的多条路由,如果指定相同优先级,则可实现负载分担;如果指定不同优先级,则可实现路由备份。在配置静态路由时,既可指定发送接口,也可指定下一跳地址,到底采用哪种方法,需要根据实际情况而定:对于支持网络地址到链路层地址解析的接口或点到点接口,指定发送接口即可;对于NBMA接口,如封装X.25或帧中继的接口、拨号口等,支持点到多点,这时除了配置IP路由外,还需在链路层建立二次路由,即IP地址到链路层地址的映射(如dialermap ip、x.25 map ip或frame-relay map ip等),这种情? 配置静态路由不能指定发送接口,应配置下一跳IP地址。【举例】配置缺省路由的下一跳为129.102.0.2。Quidway(config)#ip route 0.0.0.0 0.0.0.0 129.102.0.2【相关命令】show ip route,show ip route detail,showip route static4.6.2 show iproute显示路由表摘要信息。show ip route【命令模式】特权用户模式【使用指南】该命令输出以列表方式显示路由表,每一行代表一条路由,内容包括:目的地址/掩码长度协议优先级度量值下一跳输出接口【举例】Quidway#show ip routeRouting Tables:Destination/Mask Proto Pref Metric Nexthop Interface127.0.0.0/8 Static 0 0 127.0.0.1 127.0.0.1(LO0)127.0.0.1/32 Direct 0 0 127.0.0.1 127.0.0.1(LO0)138.102.128.0/17 Direct 0 0 138.102.129.7 138.102.129.7(EN0)202.38.165.0/24 Direct 0 0 202.38.165.1 202.38.165.1(SL1)【相关命令】ip route,show ip route detail,show iproute static4.6.3 showip route detail显示路由表详细信息show ip route detail【命令模式】特权用户模式【使用指南】该命令输出信息帮助用户进行路由方面的故障诊断。【举例】Quidway#show ip route detailRoute state descriptionNoAdv: do not advertiset Int: AS Interior routeExt: AS External route Del: route to be deletedActive: current route Retain: route retains in the routingtableRej: rejecting route Black: black hole routeRouting Tables:Generate Default: no+ = Active Route, - = Last Active, * = BothDestinations: 4 Routes: 4Holddown: 0 Delete: 9 Hidden: 0**Destination: 127.0.0.0 Mask: 255.0.0.0Protocol: *Static Preference: 0NextHop: 127.0.0.1 Interface: 127.0.0.1(LO0)State: $#@60;NoAdv Int Active Retain Rej$#@62;Age: 19:31:06 Metric: 0/0**Destination: 127.0.0.1 Mask: 255.255.255.255Protocol: *Direct Preference: 0NextHop: 127.0.0.1 Interface: 127.0.0.1(LO0)State: $#@60;NoAdv Int Active Retain$#@62;Age: 114:03:05 Metric: 0/0Holddown路由指的是:一些distance vector 路由协议(如RIP),为了避免错误路由的扩散,提高路由不可达信息的快速准确传播,而采用的一种路由发布策略。它往往在一段时间间隔内固定地发布某条路由,而不管当前实际找回的到同一目的的路由发生了什么变化。其细节参见具体的路由协议。在路由表统计中显示的是当前被Holddown的路由数目。有些路由由于某种原因(如接口Down)暂时不可用,但是又不希望被删除,我们把这种路由隐藏起来。以便以后能重新恢复在路由表统计中显示的是当前被隐藏的路由数目。【相关命令】ip route,show ip route,show ip route static4.6.4 showip route static显示静态路由表。show ip route static【命令模式】特权用户模式【使用指南】根据该命令输出信息,可以帮助用户确认对静态路由的配置是否正确。【举例】Quidway#show ip route staticStatic routes for family INET: (* indicates gateway(s)in use)1.2.3.0/24 pref 60 $#@60;Int$#@62; intf EN0127.0.0.0/8 pref 0 $#@60;NoAdv Int Retain Rej$#@62; intf 127.0.0.1以列表的方式显示静态路由表,每一行代表一条静态路由,从左到右依次为:目的地址/掩码长度优先级$#@60;状态参数$#@62;输出接口和下一跳【相关命令】ip route,show ip route,show ip route detail路由器IP性能配置命令4.5.1 clear ip counters清除IP统计信息。clear ip counters【命令模式】特权用户模式【使用指南】在某些特殊情况下,需要清除IP统计信息,重新进行统计。【举例】清除IP统计信息。Quidway#clear ip counters【相关命令】show ip interface,show ip traffic4.5.2 ifquelen ip配置IP接收队列长度。ifquelen ip queue-length【参数说明】queue-length为接口队列长度。【命令模式】全局配置模式【使用指南】配置IP接收队列长度,会影响系统运行效率,最好在技术支持人员的指导下进行。【举例】配置IP的接收队列为70。Quidway(config)#ifquelen ip 70【相关命令】show ip interface4.5.3 ifquelen arp配置ARP接收队列长度。ifquelen arp queue-length【参数说明】queue-length为接口队列长度。【命令模式】全局配置模式【使用指南】配置ARP接收队列长度,可能会影响到以太网口运行效率,最好在技术支持人员的指导下配置。【举例】配置ARP的接收队列长度为70。Quidway(config)#ifquelen arp 70【相关命令】show ip interface4.5.4 ip tcp header-compression允许或禁止接口上TC 文头压缩。[ no ] ip tcp header-compression【缺省情况】接口上缺省为禁止TCP报文头压缩。【命令模式】接口配置模式【使用指南】在低速广域网线路上运行PPP协议时,由于TCP报文头占全部传输数据的很大比例,这时可以对TCP报文头压缩以提高数据传输效率。【举例】在PPP接口Serial0上允许TCP报文头压缩。Quidway(config-if-Serial0)#ip tcp header-compression【相关命令】encapsulation ppp4.5.5 show ip cache显示IP路由缓冲。show ip cache【命令模式】特权用户模式【使用指南】显示IP最近使用过的路由,帮助用户进行故障诊断。【举例】Quidway#show ip cacheRoute to destination 129.102.100.141:Destination NetMask Type Interface GateWay129.102.100.141 255.255.255.255 direct Ethernet0上面显示信息表示最近刚使用过的路由是到达129.102.100.141的路由。该路由是一条直接路由,输出接口为Ethernet0。 【相关命令】ip route4.5.6 show ip interface显示IP接口信息。show ip interface [ interface-type interface-number ]【参数说明】interface-type为接口类型。interface-number为接口编号。【缺省情况】如果不指定接口,则缺省显示全部IP接口信息。【命令模式】特权用户模式【使用指南】该命令输出接口上全部与IP有关的信息,有助于故障诊断。【举例】Quidway#show ip interface serial 0Interface is Serial0, Index is 2ifFlags=8004 $#@60;NBMA,MULTICAST$#@62;protocol is x25 dte ietf, MTU is 1500, speed is 64000 bpsinput queue is 0/75/0 (current/max/drops)output queue is 0/75/0 (current/max/drops)0 packets input, 0 bytes, 0 multicasts0 input packets dropped, 0 no protocols, 0 input errors0 packets output, 0 bytes, 0 multicasts, 0 output errors上面显示信息表示接口Serial0 编号为2;处于NBMA模式,支持组播;该接口封装的链路层协议是X.25协议,最大传输单元是1500字节,传输速率为64000bps。再以下的信息主要反映了该接口报文的收发情况,比如说接收和发送队列的最大长度、当前队列中报文数和由于队列满而丢弃报文数,接收和发送的报文数,接收和发送的组播报文数,不能识别的报文数等等。【相关命令】show interface4.5.7 show ip traffic显示IP流量统计信息。show ip traffic【命令模式】特权用户模式【使用指南】该命令显示IP收发和拆包、组包的统计信息,有助于故障诊断。【举例】Quidway#show ip trafficIP statistics:Rcvd: 1370 total, 1349 local destination0 format errors, 0 checksum errors0 unknown protocol, 0 bad optionsFrags: 0 fragment rcvd, 0 fragment dropped0 reassembled, 0 timeouts0 fragmented, 0 couldnt fragment, 0 fragment sentSent: 359 generated, 0 forwarded, 0 raw ip packets0 dropped, 0 no route, 0 Compress failsICMP statistics:Rcvd: 0 format errors, 0 checksum errors0 redirects, 0 unreachable, 14 echo, 0 echo reply0 mask requests, 0 mask replies, 0 quench0 parameter, 0 timestamp, 0 info requestSent: 0 redirects, 0 unreachable, 0 echo, 14 echo reply0 mask requests, 0 mask replies, 0 quench0 parameter problem, 0 timestamp, 0 info reply以上显示信息包括:IP 统计信息:接收:接收到1664 个报文,其中1638 个报文送给上层协议,没有报文格式错,没有报文校验错,没有未知协议报文,没有报文选项错。分片:没有收到分片,没有丢弃分片,重装成功的分片数为0,超时分片为数为0;分组成功的报文数为0,不能被分组的报文数为0,被创建发送分片数为0。发送:产生报文470 个,被转发报文数为0,产生原始IP报文数为0,被丢弃报文数为0,无法路由的报文的报文数为0,压缩失败的报文数为0。ICMP统计信息:接收:接收到格式错报文数为0,校验字错报文数为0,重定向报文数为0,不可达报文数为0,echo请求报文16个, echo应答报文数为0,掩码请求报文数为0,掩码应答报文数为0,源站抑制报文数为0,参数错报文数为0,时间戳请求报文数为0,信息请求报文数为0。发送:发送重定向报文数为0,目的站不可达报文数为0,echo请求报文数为0,echo应答报文16 个,掩码请求报文数为0,掩码应答报文数为0,源站抑制报文数为0,参数错报文数为0,时间戳请求报文数为0,信息应答报文数为0。【相关命令】show interface,show ip interface,clear ip counters4.5.8 show tcp brief显示TCP连接状态。show tcp brief【命令模式】特权用户模式【使用指南】该命令显示全部TCP连接状态,使用户随时监控TCP连接。【举例】Quidway#show tcp briefLocalAddress LocalPort ForeignAddress ForeignPort State129.102.100.142 23 129.102.001.092 1038 ESTABLISHED000.000.000.000 23 000.000.000.000 0 LISTEN以上显示信息表示:一个TCP连接已经建立,该TCP连接的本地IP地址为129.102.100.142,本地端口号为23,远地IP地址为129.102.1.92,远地端口号为1038,另外本地有一个对23号端口监听的服务器。【相关命令】show client4.5.9 tcp finwait-time配置TCP finwait定时器。tcp finwait-time time-value【参数说明】time-value为TCP finwait定时器值,单位秒,范围76~3600。【缺省情况】TCP finwait定时器缺省为675秒。【命令模式】全局配置模式【使用指南】当TCP的连接状态由FIN_WATI_1变为FIN_WAIT_2时启动finwait定时器。若finwait定时器超时前仍未收到FIN报文,则TCP连接被终止。对该参数的配置最好在技术支持人员的指导下进行。【举例】配置TCP finwait定时器的值为675秒。Quidway(config)#tcp finwait-time 675【相关命令】tcp synwait-time,tcp window-size4.5.10 tcp synwait-time配置TCP synwait定时器。tcp synwait-time time-value【参数说明】time-value为TCP synwait 定时器值,单位秒,范围2~600。【缺省情况】TCP synwait定时器缺省值为75秒。【命令模式】全局配置模式【使用指南】当发送syn报文时,TCP启动synwait定时器,若synwait超时前未收到回应报文,则TCP连接将被终止。对该参数的配置最好在技术支持人员的指导下进行。【举例】配置TCP synwait定时器为75秒。Quidway(config)#tcp synwait-time 75【相关命令】tcp finwait-time,tcp window-size4.5.11 tcp window-size配置面向连接Socket的收发缓冲区大小。tcp window-size window-size【参数说明】window-size为面向连接Socket的收发缓冲区大小,单位K字节,范围1~32。【缺省情况】面向连接Socket的收发缓冲区大小缺省为4K字节。【命令模式】全局配置模式【使用指南】对该参数的配置最好在技术支持人员的指导下进行。【举例】配置面向连接Socket的收发缓冲区大小为4K字节。Quidway(config)#tcp window-size 4【相关命令】tcp finwait-time,tcp synwait-time【end】
2023-07-17 11:35:091

如何通过反射使用BluetoothHeadset类

Usbsetting 中tethering 设置流程一 资源位置及入口文件USBtethering, usb_tethering_button_textXml/tether_prefs.xml------usb_tether_settings,布局文件packages/apps/Settings/AndroidManifest.xml<!-- Keep compatibility with oldshortcuts. --><activity-aliasandroid:name=".TetherSettings"android:label="@string/tether_settings_title_all"android:clearTaskOnLaunch="true"android:exported="true"android:targetActivity="Settings$TetherSettingsActivity"><meta-dataandroid:name="com.android.settings.FRAGMENT_CLASS"android:value="com.android.settings.TetherSettings"/><meta-dataandroid:name="com.android.settings.TOP_LEVEL_HEADER_ID"android:resource="@id/wireless_settings"/><meta-dataandroid:name="com.android.settings.PARENT_FRAGMENT_TITLE"android:resource="@string/wireless_networks_settings_title"/><meta-dataandroid:name="com.android.settings.PARENT_FRAGMENT_CLASS"android:value="com.android.settings.Settings$WirelessSettingsActivity"/></activity-alias>TetherSettings.java二 触发流程2.1TetherSettings.javapackages/apps/Settings/src/com/android/settings/TetherSettings.javaonPreferenceTreeClickSXlog.d(TAG,"onPreferenceTreeClick - setusbTethering(" + newState + ")mUsbTethering: " + mUsbTethering);setUsbTethering(true);下面是设置时抓取的log日志D/TetherSettings( 543): onPreferenceTreeClick -setusbTethering(true) mUsbTethering: trueD/Tethering(271): setUsbTethering(true)D/UsbDeviceManager( 271):setCurrentFunction(rndis) default: falseW/UsbDeviceManager( 271): handleMessage:2W/UsbDeviceManager( 271): setEnabledFunctions:functions = rndisW/UsbDeviceManager( 271): setEnabledFunctions,mDefaultFunctions: mtp,adbW/UsbDeviceManager( 271): setEnabledFunctions,mCurrentFunctions: mtp,adbD/UsbDeviceManager( 271): setEnabledFunctions,mSettingFunction: mtp,adbW/UsbDeviceManager( 271): containsFunction,functions: rndisW/UsbDeviceManager( 271): containsFunction,function: adbW/UsbDeviceManager( 271): containsFunctionindex: -1W/UsbDeviceManager( 271): addFunction,functions: rndisW/UsbDeviceManager( 271): addFunction, function:adbW/UsbDeviceManager( 271): containsFunction,functions: rndisW/UsbDeviceManager( 271): containsFunction,function: acmW/UsbDeviceManager( 271): containsFunctionindex: -1W/UsbDeviceManager( 271): containsFunction,functions: rndis,adbW/UsbDeviceManager( 271): containsFunction,function: acmW/UsbDeviceManager( 271): containsFunctionindex: -1D/UsbDeviceManager( 271):setUsbConfig(none)W/UsbDeviceManager( 271): setUsbConfig, config:nonepublicboolean onPreferenceTreeClick(PreferenceScreenscreen, Preference preference) {ConnectivityManager cm =(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);if(preference == mUsbTether) {if(!mUsbTethering) {booleannewState = mUsbTether.isChecked();mUsbTethering = true;mUsbTetherCheckEnable = false;mUsbTether.setEnabled(false);SXlog.d(TAG,"onPreferenceTreeClick - setusbTethering(" + newState + ")mUsbTethering: " + mUsbTethering);if(newState) {startProvisioningIfNecessary(USB_TETHERING);} else{setUsbTethering(newState);}} else{returntrue;}} else if(preference == mBluetoothTether) {private voidsetUsbTethering(booleanenabled) {ConnectivityManager cm =(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);if(cm.setUsbTethering(enabled) !=ConnectivityManager.TETHER_ERROR_NO_ERROR) {mUsbTether.setChecked(false);mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);return;}mUsbTether.setSummary("");}2.2ConnectivityManager.javaframeworks/base/core/java/android/net/ConnectivityManager.javaprivatefinal IConnectivityManagermService;public intsetUsbTethering(booleanenable) {try{returnmService.setUsbTethering(enable);} catch(RemoteException e) {returnTETHER_ERROR_SERVICE_UNAVAIL;}}manager 和service有一个对应关系,固定的规则。 manager是为了sdk诞生的,方便app开发者调用。其实可以直接调用service,如mountservice是没有mountmanager的。service是在系统起来是就被android系统启动的,而manager是后期有需要时实例化起来的。Service的目录在:/frameworks/base/services/java/com/android/server/manager的目录在:frameworks/base/core/java/android2.3ConnectivityService.javaframeworks/base/services/java/com/android/serverprivateTethering mTethering;public intsetUsbTethering(booleanenable) {enforceTetherAccessPermission();if(isTetheringSupported()) {returnmTethering.setUsbTethering(enable);} else{returnConnectivityManager.TETHER_ERROR_UNSUPPORTED;}}2.4Tethering.javaframeworks/base/services/java/com/android/server/connectivity/Tethering.javapublic intsetUsbTethering(booleanenable) {UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);………………else{mUsbTetherRequested = true;usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS,false);}通过service,来获取manager,进行操作。这个tethering.java的构造函数publicTethering(Context context,INetworkManagementService nmService,INetworkStatsService statsService,IConnectivityManager connService, Looper looper){Context是获取全局信息的接口,2.5 UsbManager.java/frameworks/base/core/java/android/hardware/usb/UsbManager.javapublic void setCurrentFunction(Stringfunction, boolean makeDefault) {try {mService.setCurrentFunction(function,makeDefault);}catch (RemoteException e) {Log.e(TAG, "RemoteException insetCurrentFunction", e);}}2.6frameworks/base/services/java/com/android/server/usb$mengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server$cd usbmengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server/usb$lsUsbDeviceManager.java UsbHostManager.javaUsbService.java UsbSettingsManager.java/frameworks/base/services/java/com/android/server/usb/UsbService.javapublic void setCurrentFunction(String function, booleanmakeDefault) {mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB,null);if(mDeviceManager != null) {mDeviceManager.setCurrentFunction(function,makeDefault);}else {throw new IllegalStateException("USB devicemode not supported");}}/frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.javapublic void setCurrentFunction(Stringfunction, boolean makeDefault) {if(DEBUG) Slog.d(TAG, "setCurrentFunction(" + function + ") default:" + makeDefault);mHandler.sendMessage(MSG_SET_CURRENT_FUNCTION,function, makeDefault);}public void handleMessage(Message msg){caseMSG_SET_CURRENT_FUNCTION:String function =(String)msg.obj;boolean makeDefault = (msg.arg1 ==1);if (function != null&&function.equals(UsbManager.USB_FUNCTION_CHARGING_ONLY)){mSettingUsbCharging = true;SXlog.d(TAG, "handleMessage -MSG_SET_CURRENT_FUNCTION - USB_FUNCTION_CHARGING_ONLY -makeDefault: " + makeDefault);} else {mSettingUsbCharging = false;}setEnabledFunctions(function,makeDefault);SXlog.d(TAG, "handleMessage -MSG_SET_CURRENT_FUNCTION - function: " +function);break;private void setEnabledFunctions(Stringfunctions, boolean makeDefault) {private boolean setUsbConfig(String config) {SystemProperties.set("sys.usb.config",config);
2023-07-17 11:35:291

android,xml开发,下面的header干嘛用的?android:fragment又是什么?我在文档查不到?“org…ment"干什

header是用在PreferenceActivity里面的。你可以看看平板的系统选项,分别是左边的header对应右边的内容。只要是用在PreferenceActivity里面onBuildHeaders方法。
2023-07-17 11:35:361

怎么样得到引用的类属于那一个JAR包中的

ctrl+鼠标左键 点击该引用的类名,就能跳转到该类文件了,然后在顶栏就能看到类所在的JAR包目录例如:我想寻找下方的PreferenceFragment 是在哪个JAR包下步骤一:ctrl+鼠标左键点击PreferenceFragment 步骤二:此时跳转到了PreferenceFragment 所在的class文件,顶栏看到了该类所在的package步骤三:在左边项目栏--选择Project,然后点一下“2”,就会定位到包所在了,此时能看到preference下确实有PreferenceFragment类 (也可以Ctrl+左击 步骤二中 顶栏的android.preference,也能跳转到包目录)PS:若用的是Eclipse,一般执行步骤二就能看到JAR包目录了。关键点是:CTRL+鼠标左击 方法名 或 类名
2023-07-17 11:35:511

如何在Fragment中使用PreferenceFragment

public FragmentSetup() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflat...
2023-07-17 11:36:002

如何在Fragment中使用PreferenceFragment-CSDN论坛

public FragmentSetup() { // Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_setup, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // Load the preferences from an XML resource}
2023-07-17 11:36:081

android fragment相互切换的时候生命周期怎么走

Fragment的生命周期初探:因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。每当创建一个Fragment时,首先添加以下三个回调方法:onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。 onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。 onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。将Fragment加载到Activity当中有两种方式:方式一:添加Fragment到Activity的布局文件当中 方式二:在Activity的代码中动态添加Fragment(荐)第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。
2023-07-17 11:36:152

android fragment相互切换的时候生命周期怎么走

Fragment的生命周期初探:因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。每当创建一个Fragment时,首先添加以下三个回调方法:onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。 onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。 onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。将Fragment加载到Activity当中有两种方式:方式一:添加Fragment到Activity的布局文件当中 方式二:在Activity的代码中动态添加Fragment(荐)第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。
2023-07-17 11:36:471

android 怎么在自定义控件中获取控件所在fragment的实例

getFragmentManager().findFragmentById(id).getView().findViewById(id) 这样应该就可以了
2023-07-17 11:36:552

继承PreferenceActivity,报需要验证fragment是否有效

@Overrideprotected boolean isValidFragment (String fragmentName) {return [YOUR_FRAGMENT_NAME].class.getName().equals(fragmentName);}或者@Overrideprotected boolean isValidFragment (String fragmentName) {return true;}
2023-07-17 11:37:021

如何将activity装载进fragment

  Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面,并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。    Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。    当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。你可以在layoutxml文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为actvitiy工作。    设计的哲学:    为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,通过官方文档中的这张图片可以很明显地看到Fragment的好处:        注:左边为平板,右边为手持设备。        二、Fragment的生命周期:    因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。    如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。    但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。    当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。    使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。    每当创建一个Fragment时,首先添加以下三个回调方法:    onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。  onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。  onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。  将Fragment加载到Activity当中有两种方式:    方式一:添加Fragment到Activity的布局文件当中  方式二:在Activity的代码中动态添加Fragment  第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。    第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。
2023-07-17 11:37:091

常用英语单词5000

最常用英语单词有accent 加重、accurate 精确、acquire 获得、action 操作,运算、adjust 调整、ambient light 环境光、angle 角度、anti-aliased 平滑处理 arbitrary 任意的等。1常用英语单词1000Aaccent 加重accurate 精确acquire 获得action 操作,运算adjust 调整ambient light 环境光angle 角度anti-aliased 平滑处理arbitrary 任意的arrange 排列arrow 箭头artistic 艺术的,美术的Bbalance 平衡bar 条,栏base 基准batch 批量,成批bevel 使成斜角,斜切bilinear 双线性插值bitmap 位图,点阵图blend 混合,调和blur 模糊bold 加粗border 边界,边框brightness 亮度brush 画笔,笔形build 建造,创立burn 焦化,烧黑button 按钮Ccache 快速存储器calculation 计算calibrate 校准,校验canvas 画布carve 镌刻cascade 层叠chalk 粉笔,作记号channel 通道,频道charcoal 炭笔画chrome 铬黄,铬合金classic 经典的click (单)击(鼠标)clipboard 剪贴版clone 复制cloud 云彩command 命令content 内容continue 连续的,持续的contour 轮廓线,周线contract 收缩,缩小contrast 反差,对比coordinate 协调,协作craquelue 裂纹crayon 蜡笔crop 剪裁crystallize 水晶curl 螺旋状物,卷曲的current 当前的cursor 光标,游标curve 曲线custom 自定义Ddarken 较黑的,使变黑daubs 涂抹define 定义design 设计destination 目标,对象difference 区别,差异diffuse 散乱扩散displace 转移distort 扭曲document 文档,文件dodge 加亮drop shadow 投影duotone 双色调duplicate 复制dust 灰尘,尘土Eedge 边界effect 效果作用embed 嵌入emboss 浮雕enlarge 放大equalize 平均化expand 扩充,扩展export 输出extrude 突出eyedropper 吸管Ffacet 刻面feather 晕开,羽化fill 填充flare 张开,闪耀flatten 变平flip 翻转fragment 碎片fresco 壁画Ggamut 整个领域general 普通的glass 玻璃杯glow 发光gradient 渐变grain 纹理graphics 图形grayscale 灰阶,灰度图grid 坐标格子group 群,组grow 成长guide 参考,参考线Hhalftone 半色调histogram 柱状图horizontal 水平hue 色相Iicon 图标image 图像import 输入index 索引Inner 内部的input 输入intensity 亮度inverse 相反invert 反转,反相Kkeyboard 键盘kilometre 千米,公里Llens 凹凸透镜,焦距level 级别,色阶light 光线location 定位Mmagic 有魔法的magic wand 魔棒mask 遮罩,掩膜maximum 最大值memory 记忆,内存merge 合并,融合minimum 最小值mode 模式,方式modify 修改,改变monitor 显示器,监视器monochrome 单色的mosaic 马塞克motion 运动multichannel 多通道模式Nnegative 负片,负像noise 噪音,糙点numeric 数字化的;分数Ooffset 位移,偏移option 选项ornament 装饰outline 轮廓,外形Ppalette 调色板parameter 参数,参变量paste 粘贴pastel 彩色粉笔,蜡笔画patchwork 补教,式样path 路径pattern 图案perspective 透视pinch 极化,凹陷或突起plug-ins 插件(滤镜)pointillize 乱点描述polar coordinates 极坐标poster 招贴画posterize 色调分离preference 偏好设定preview 预览previous 前一个pseudo 假的purge 消除Rradial 圆形range 范围,领域relief 救济,援救render 渲染,粉刷,上色reticulation 网状物revert 还原,复原ripple 涟漪,波纹rotate 旋转rough 粗略ruler 标尺Ssaturation 色彩饱和度scale 缩放scratch 暂时,临时screen 屏幕seam 缝,接缝selection 选择,工作区selective 精心挑选的separation 分离,分开sharpen 锐化shear 扭曲变形similar 相似的sketch 草图,画稿skew 偏斜的smart 灵活的,精巧的smooth 平滑的smudge 玷污,污点snapshot 快照solarize 中途曝光spatter 溅,洒落sponge 海绵spray 喷,喷涂stain 着色,染色stamp 盖章,盖印status 状态,状况stereo 立体声stroke 笔划,打击swirl 漩涡,卷状物Ttexture 质地,纹理threshold 两阶调化tile 平铺,窗口并联trace 跟踪,镂边trail 痕迹,足迹transform 转变,变形transparency 透明度twirl 卷曲,快速旋转Uultimate 最终的uncommon 罕见,非凡的units 单位,单元Vvertex 顶点,最高点vertical 垂直的video 视频,电视view 视图,显示方式virus 病毒visible 可见的,明显的visual 视觉的vogue 流行,时尚volume (磁盘)容量vortex 漩涡Wwatercolor 水彩watermark 水印wave 波纹,波动welder 焊接workstation 工作站wrinkle 皱纹Zzero 零zigzag 锯齿zoom in 放大zoom out 缩小2背英语单词的最好方法第一步,准备工作:准备若干张小纸条,数目由您要记忆的单词数来决定,用于写您要记忆的英语单词,原则上每张纸条只写一个单词;准备好30个小纸盒子,第1个盒子存放今天学习与复习的单词,第2个盒子存放明天复习的单词... ...,依次类推,第30个盒子存放第30天复习的单词。第二步,添加新单词:每天把220个新单词写成条子放在盒子1中(如果您想多学可以多放点,想少学点也可以少放点),同时把盒子2的单词放到盒子1中,把盒子3的单词放在盒子2中... ...,依次类推。第三步,学习与复习:开始学习盒子1中的单词,同时根据自己的遗忘参数值决定刚学过的单词放在2 -- 30中的哪个盒子中。根据自己复习效果调整自己的遗忘参数值。最好的办法就是应用“艾宾浩斯--满爱镇微分记忆算法模型”。该模式真正做到记忆最轻松,复习次数最少,每次复习花费的时间最少。该模型可以自动适应于您的遗忘规律,对每个人的每个记忆项,动态维护一套遗忘参数,并且是在记忆的过程中进行动态维护,在最需要复习的时候提醒您进行复习,直到记忆熟悉为止。采用该模型进行记忆,比普通传统的方法更轻松、更快捷、更牢固,您根本不需要操心什么时候学习新单词,什么时候复习应该复习的单词,一切工作由系统自动完成,是传统模式无法比拟的。
2023-07-17 11:37:171

java在主activity中能访问到fragment的空间吗

Android上的界面展示都是通过Activity实现的,Activity实在是太常用了。但是Activity也有它的局限性,同样的界面在手机上显示可能很好看,在平板上就未必了,因为平板的屏幕非常大,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。这个时候更好的体验效果是在Activity中嵌入"小Activity",然后每个"小Activity"又可以拥有自己的布局。因此,我们今天的主角Fragment登场了。 一、Fragment初探: Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面,并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。 Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。 当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。你可以在layoutxml文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为actvitiy工作。 设计的哲学: 为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,通过官方文档中的这张图片可以很明显地看到Fragment的好处:注:左边为平板,右边为手持设备。二、Fragment的生命周期: 因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。 如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。 但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。 当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。 使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。 每当创建一个Fragment时,首先添加以下三个回调方法: onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。将Fragment加载到Activity当中有两种方式: 方式一:添加Fragment到Activity的布局文件当中方式二:在Activity的代码中动态添加Fragment第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。 第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。 下面将分别介绍一下。    三、在Activity的布局文件中添加Fragment:(不推荐) 平板的模拟器参数如下:然后新建一个工程文件。然后继续如下步骤: (1)新建文件fragment_hello.xml和HelloFragment.java: fragment_hello.xml代码如下:(即Fragment的布局文件) 复制代码<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入内容"/> <RatingBar android:id="@+id/ratingBar1" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>复制代码HelloFragment.java代码如下: 复制代码 1 package com.example.m01_fragment01; 2 3 import android.app.Fragment; 4 import android.os.Bundle; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 9 public class HelloFragment extends Fragment {10 11 @Override12 public void onCreate(Bundle savedInstanceState) {13 super.onCreate(savedInstanceState);14 }15 16 @Override17 public View onCreateView(LayoutInflater inflater, ViewGroup container,18 Bundle savedInstanceState) {19 View view = inflater.inflate(R.layout.fragment_hello, null); // View android.view.LayoutInflater.inflate(int resource, ViewGroup root) 20 return view;21 }22 23 @Override24 public void onPause() {25 super.onPause();26 }27 }复制代码重点在于第19和20行,通过inflate()方法将自定义的fragment的布局加载进来。 19行代码中,第二个参数中,如果布局没有根,那就用null。 注:上方代码中,因为我们的程序是面对Android 4.0以上版本的,所以导入Fragment的包时,选择第一个:android.app.Fragment(2)将Fragment添加到Activity的布局中: 修改activity_main.xml的代码如下: 复制代码 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <fragment 8 android:id="@+id/fragment_hello" 9 android:name="com.example.m01_fragment02.HelloFragment"10 android:layout_width="wrap_content"11 android:layout_height="wrap_content" />12 </LinearLayout>复制代码08行和09行是关键。其中android:name属性填上你自己创建的fragment的完整类名。如下图:当系统创建这个Activity的布局文件时,系统会实例化每一个fragment,并且调用它们的onCreateView()方法,来获得相应fragment的布局,并将返回值插入fragment标签所在的地方。 运行之后,效果如下:实际上,这种方式在开发中并不推荐,我们来介绍另外一种方法。四、在activity代码中添加fragment: 【实例】点击左侧fragment中的按钮,弹出右侧的fragment。新建一个工程文件,然后步骤如下: (1)将activity_main的布局分为两部分:左边占1/4,右边占3/4。修改activity_main.xml的代码如下: 复制代码<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="horizontal" > <LinearLayout android:id="@+id/left" android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="1" android:background="#00BFFF" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示"/> </LinearLayout> <LinearLayout android:id="@+id/right" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" android:background="#00FFFF" android:orientation="vertical" > </LinearLayout> </LinearLayout>复制代码上方代码中,一个LinearLayout代表一个Fragment的容器,记得要给每个fragment加一个容器的id。
2023-07-17 11:37:311

如何在activity中默认加载一个listfragment-CSDN论坛

  Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面,并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。    Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。    当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。你可以在layoutxml文件中声明Fragment,元素为:<fragment>;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为actvitiy工作。    设计的哲学:    为了让界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,通过官方文档中的这张图片可以很明显地看到Fragment的好处:        注:左边为平板,右边为手持设备。        二、Fragment的生命周期:    因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。    如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。    但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。    当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。    使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。    每当创建一个Fragment时,首先添加以下三个回调方法:    onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。  onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。  onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。  将Fragment加载到Activity当中有两种方式:    方式一:添加Fragment到Activity的布局文件当中  方式二:在Activity的代码中动态添加Fragment  第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。    第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。
2023-07-17 11:37:391

Super Junior到底分成了几小队?成员有哪些?

H里有公主和基范?MS没有吧
2023-07-17 11:37:2512

怎么用qq号登录电脑管家?

首先最新的V16版本,登录界面确实只能用微信登录;但是别急,在我们用微信登录后,点击自己的头像进入个人等级详情页:右下角有立即转换按钮可以看到右下角有立即转换按钮,点击“立即转换”,可以看到“转换QQ账号”入口,点击QQ号授权:授权后可以看到自己之前用QQ登录电脑管家时账号金币数等等:这个时候可以将QQ账号的等级金币数继承过来,算是一个账号迁移方案了
2023-07-17 11:37:291

MQ里面 partition是什么意思?

partition是代表分区的意思,如C盘、D盘等分区
2023-07-17 11:37:311

请问:英文的 lil 和 lol 是什么意思?

........啊实打实的
2023-07-17 11:37:345

求 yivis old friends 歌词翻译!

Old Friends - YlvisI saw you at the railway stationthere had been a cancelationyou were smoking cigarettes aloneI walked up and said hello,I lost my wife two days agoYou shand and said Francis was your nameAnd you had a hatAnd I had a hatMmm, we both had hatsAnd my wife was deadAnd your wife was deadShit happens, Francis saidFrancis said it"s five o"clockHow about we find a rockand throw at some cars from the bridgeI laughed and said that sounds like funWe walked into the setting sunAnd Francis said "I"m aiming at the kids"And he threw a rockSo I threw a rockWe both put some gravel in a sockAnd he threw the sock, I said we should stopHe smiled at me, then threw a rock in a sockWe snuck down to the local farmAnd there we opened up the barnTo set the horses free and watch them runThe moon was extra bright that nightThe horses in the pale moonlight"Watch this" Francis said, and pulled his gunAnd he shot a horseSo I shot a horseFrancis choked a chicken with his handsBut watching them die, he started to cry"I"m bored" Francis said, let"s steal a carOh, Margaret, Oh MargaretDon"t you worry bout" me nowI"m doing just fine on my ownThere are other things to laughthan your soft skin against mineAnd Francis is helping me move onI"m moving onLife"s a bitch, a wise man saidNo matter what, you end up deadAnd all that you can wish for is a friendSo pour another glass of wineWith Francis shoulder touching mineI "ll stay right here until the bitter endAnd you have a hatAnd I have a hatMmm, we both have a hatAnd your wife is deadAnd my wife is deadHere"s to life, Francis saidHere"s to life, Francis saidHere"s to life, Francis said老朋友——Ylvis
2023-07-17 11:37:371

求!コスモス - spitz 歌词

コスモス 诗?曲:草野正宗/编曲:スピッツ 鲜やかなさよなら 永远のさよなら 追い求めたモチーフはどこ 幻にも会えず それでも探していた今日までの砂漠 约束の海まで ボロボロのスポーツカー ひとりで行くクロールの午后 君の冷たい手を暖めたあの日から手に入れた浮力 ささやく光 浴びて立つ 君を见た秋の日 さびしげな真昼の月と西风に 揺れて咲くコスモス 二度と帰れない 鲜やかなさよなら 永远のさよなら 追い求めたモチーフはどこ 幻にも会えず それでも探していた今日までの砂漠 あの日のままの秋の空 君が生きてたなら かすかな真昼の月と西风に 揺れて咲くコスモス 二度と帰れない 鲜やかなさよなら 永远のさよなら 追い求めたモチーフはどこ 幻にも会えず それでも探していた今日までの砂漠波斯菊(cosmos) 中译:Orika 光彩夺目的道别 是永远的道别 我所追求过的命题(法 motif)在何方 连幻影也遇不到 即便如此依然寻觅至今的沙漠 到我们约好的海边去 开著那台破破烂烂的跑车(sports car) 独自前往 游著自由式(crawl)的午后 自从我温暖了你冷冷双手的那天起 便获得的这股浮力 秋天里的某一天 我见到了 浸润在一片碎语光芒中的你 在恍若凄清的白昼之月与西风之中 摇曳绽放的波斯菊 亦将一去不复返 光彩夺目的道别 是永远的道别 我所追求过的命题在何方 连幻影也遇不到 即便如此依然寻觅至今的沙漠 一如那天的秋日晴空 若你曾存活过的话 在隐隐约约的白昼之月与西风之中 摇曳绽放的波斯菊 亦将一去不复返 光彩夺目的道别 是永远的道别 我所追求过的命题 在何方 连幻影也遇不到 即便如此依然寻觅至今的沙漠
2023-07-17 11:37:431

Mysql分区表Partition

一、背景 话说风和日丽的一天,为提高随着业务增长的大表(3510449行吧)的访问效率,于是决定对表分区,记录如下。 二、实操 结合业务,若干条记录会集中在一个日期,查询时也往往只查询一个日期内的数据,于是选取分区字段为时间。 创建分区 比如 CREATE TABLE message_all ( id int(10) NOT NULL AUTO_INCREMENT, ...... createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间" PRIMARY KEY ( id , createtime ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY RANGE (YEAR(createtime)) (PARTITION p2015 VALUES LESS THAN (2016) ENGINE = InnoDB, PARTITION p2016 VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION p2017 VALUES LESS THAN (2018) ENGINE = InnoDB, PARTITION p2018 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) 不过我们表已经有了当然不能这么建,除非你想导一次数据。 如下操作 : 1、 ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime)) ( PARTITION p2015 VALUES LESS THAN (to_days("2016-01-01")), PARTITION p2016 VALUES LESS THAN (to_days("2017-01-01")), PARTITION p2017 VALUES LESS THAN (to_days("2018-01-01")), PARTITION p2018 VALUES LESS THAN MAXVALUE ); 或者 2、ALTER TABLE message_all PARTITION BY RANGE (YEAR(createtime)) ( PARTITION p2015 VALUES LESS THAN (YEAR("2016-01-01")) ); 然后追加。 ALTER TABLE message_all ADD PARTITION ( PARTITION p2016 VALUES LESS THAN (YEAR("2017-01-01")), PARTITION p2017 VALUES LESS THAN (YEAR("2018-01-01")), PARTITION p2018 VALUES LESS THAN MAXVALUE ); 这里会有几种错误情况: 1、ALTER TABLE message_all PARTITION BY RANGE (to_days(createtime)) ; [Err] 1492 - For RANGE partitions each partition must be defined 解释:必须指定至少一个分区。 2、[Err] 1492 - A PRIMARY KEY must include all columns in the table"s partitioning function 解释:分区字段必须是主键之一。 3、[Err] 1492 - Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed 解释:分区字段为timestamp,换成datetime。 4、[Err] 1526 - Table has no partition for value xxxx 解释:用追加方式第一次必须覆盖目前所有数据。 总结: 1、创建时必须指定至少一个分区。 2、key必须为主键之一。 3、RANGE处必须为INT型,时间字段用函数转——YEAR()、YEARWEEK()、TO_DAYS()。 4、THAN处必须为INT型,时间字段用函数转——TO_DAYS、TO_SECONDS()、UNIX_TIMESTAMP()。 5、它就是以两个INT比大小划分的文件。 6、所有ENGINE必须一样。 7、范围分区添加只能在最大值后面追加。 8、分区是有上限的貌似1024个。 用到的其他操作 1、删除分区(直接扔掉分区文件,数据也没了) ALTER TABLE message_all DROP PARTITION p2016; 2、清空分区数据 ALTER TABLE message_all TRUNCATE PARTITION p2017; 3、重定义(可实现:分区拆分、合并、重命名) ALTER TABLE message_all REORGANIZE PARTITION p201601,p201602,p201603,p201604 INTO ( PARTITION p2016012 VALUES less than(TO_DAYS("2016-03-01")), PARTITION p2016034 VALUES less than(TO_DAYS("2016-05-01")) ); 检查/查看你的分区 1、SHOW TABLE STATUS LIKE "message_all"; 2、SELECT * FROM information_schema.partitions WHERE table_name="message_all"; 3、SHOW CREATE TABLE message_all; 4、EXPLAIN SELECT COUNT(1) FROM message_all WHERE createtime>= "2016-01-01" AND createtime < "2016-12-30";如果用到了分区partitions里会有显示。 5、指定分区查 SELECT COUNT(1) FROM message_all PARTITION (p2016) 表别名 WHERE ......; 到这里就结束啦,土豆白。 一些概念 水平分区Partition有以下几种模式
2023-07-17 11:37:471

which是代词吗

which是代词来滴代词 pron. 1. (用作疑问代词)哪一个,哪一些Which is my seat? 哪个座位是我的? 2. (用做关系代词)那一个,那一些He also had a gun with which to defend himself. 他还有一把自卫用的枪。 He invited us to dinner, which was very kind of him. 他邀请我们吃晚饭,他这么做真是太客气了。 She was very fond of speaking French, which indeed she spoke well. 她很喜欢讲法语,而且确实讲得不错。 He lives in the house which is opposite ours. 他住在我们对面的那栋房子里。 形容词 a. 1. (用作疑问形容词)哪一个,哪一些Which university did you go to, Oxford or Cambridge? 你上过哪所大学?牛津还是剑桥? 2. (用作关系形容词)这个,这些The doctor told him to give up smoking, which advice he took. 医生叮嘱他戒烟,他接受了这一忠告。
2023-07-17 11:37:471

吾家是什么意思

吾家的解释(1).我家。《史记·外戚 世家 》:“主与 左右 议 长安 中列侯可为夫者,皆言大 将军 可。主笑曰:‘此出吾家,常使令骑从我出入耳, 奈何 用为夫乎?"” 唐 杜甫 《宗武生日》诗:“诗是吾家事,人传世上情。” (2).犹我。 唐 寒山 《诗》之四:“吾家好隐沦,居处绝嚣尘。践草成 三径 ,瞻云作四邻。” (3).我的同宗。 鲁迅 《华盖集· 咬文嚼字 一》:“假使他谈到Gorky,大概是称他‘吾家rky"的了。”注:“‘吾家rky"即吾家尔基。旧时常称同宗的人为‘吾家某某",有些人为了攀附名人,抬高自己,连同姓也都称‘吾家某某"。” 词语分解 吾的解释 吾 ú 我,我的:吾身。吾国。吾辈。 姓。 吾 ù 古同“御”,抵御。 部首 :口; 家的解释 家 ā 共同 生活 的眷属和他们所住的地方: 家庭 。家眷。家长(僴 )。家园。家谱。家塾。家乡。 家风 。 家训 。家规。 家喻户晓 。如数家珍。 家庭 所在 的地方: 回家 。 老家 。安家。 居住:“可以家焉”。 对人称自己的
2023-07-17 11:37:481

lil烟弹在哪能买到

日本。Lil烟弹通过IQOS专卖店以及便利店在日本全国销售。LilHybrid具有传统加热不燃烧烟具所不具备的各种功能:一、显示屏可以显示使用的次数和剩余量。二、兼容雾化烟弹和卷烟烟弹,烟雾量比IQOS烟弹加热的烟雾量要大。三、自动启动,插入烟弹时,机器自动加热。四、无需清洁,机器自动清洁。
2023-07-17 11:37:231

qq电脑管家下的文件在哪里

  qq电脑管家下载文件的保存位置根据个人的设置而定,查看具体的下载的文件的保存位置的步骤如下:   1、打开电脑,进入电脑管家,点击右上角的倒三角符号,进入设置页面;   2、在弹出的设置页面的窗口中,点击下载设置,即可观看下载的文件的具体保存位置。
2023-07-17 11:37:221

cst是什么时区

1、美国中部时间:Central Standard Time (USA) UT-6:00;
2023-07-17 11:37:214

taxi是什么意思

taxi意思如下:n. 出租汽车; 计程车; 的士; (非洲某些地方走固定路线、乘客可随时上下的) 小公共汽车,小巴士。v. (起飞前或降落后在地面上) 滑行。taxi例句:Should we go by car or by taxi?我们是开车去还是坐出租车去?We can go there by taxi.我们可以坐出租车去那里。Why not go by taxi?为什么不坐出租车去?
2023-07-17 11:37:171

spark中关于partition的简单理解

看到一篇关于spark partition的文件,讲的简单易懂通俗,故转。 我们要想对spark中RDD的分区进行一个简单的了解的话,就不免要先了解一下hdfs的前世今生。 众所周知,hdfs是一个非常不错的分布式文件系统,这是这么多年来大家有目共睹的。 hdfs文件为分布式存储,每个文件都被切分为block(默认为128M)。为了达到容错的目的,他们还提供为每个block存放了N个副本(默认为3个)。当然,以上说的这些也可以根据实际的环境业务调整。 多副本除了可以达到容错的目的,也为计算时数据的本地性提供了便捷。当数据所在节点的计算资源不充足时,多副本机制可以不用迁移数据,直接在另一个副本所在节点计算即可。此时看到这里,肯定就有人会问了,那如果所有副本所在的节点计算资源都不充足那该怎么办? 问的很好,一般会有一个配置来设置一个等待时长来等待的,假设等待时长为三秒,如果超过三秒,还没有空闲资源,就会分配给别的副本所在节点计算的,如果再别的副本所在节点也需等待且超过了三秒。则就会启动数据迁移了(诸多因素影响,代价就比较大了)。 接下来我们就介绍RDD,RDD是什么?弹性分布式数据集。 弹性:并不是指他可以动态扩展,而是血统容错机制。 分布式:顾名思义,RDD会在多个节点上存储,就和hdfs的分布式道理是一样的。hdfs文件被切分为多个block存储在各个节点上,而RDD是被切分为多个partition。不同的partition可能在不同的节点上。 再spark读取hdfs的场景下,spark把hdfs的block读到内存就会抽象为spark的partition。至于后续遇到shuffle的操作,RDD的partition可以根据Hash再次进行划分(一般pairRDD是使用key做Hash再取余来划分partition)。 再spark计算末尾,一般会把数据做持久化到hive,hbase,hdfs等等。我们就拿hdfs举例,将RDD持久化到hdfs上,RDD的每个partition就会存成一个文件,如果文件小于128M,就可以理解为一个partition对应hdfs的一个block。反之,如果大于128M,就会被且分为多个block,这样,一个partition就会对应多个block。 鉴于上述partition大于128M的情况,在做sparkStreaming增量数据累加时一定要记得调整RDD的分区数。假设,第一次保存RDD时10个partition,每个partition有140M。那么该RDD保存在hdfs上就会有20个block,下一批次重新读取hdfs上的这些数据,RDD的partition个数就会变为20个。再后续有类似union的操作,导致partition增加,但是程序有没有repartition或者进过shuffle的重新分区,这样就导致这部分数据的partition无限增加,这样一直下去肯定是会出问题的。所以,类似这样的情景,再程序开发结束一定要审查需不需要重新分区。 转自:https://www.jianshu.com/p/3e79db80c43c
2023-07-17 11:37:171

请问英文口语里用到 lil这个词什么意思?是简写么?

little.
2023-07-17 11:37:163

怎么在电脑上关闭QQ电脑管家?

如果您想在电脑上关闭QQ电脑管家,可以按照以下步骤进行:打开QQ电脑管家主界面。在主界面的右下角找到“设置”按钮,点击打开设置窗口。在设置窗口中,找到“保护与加速”选项,并选择“普通模式”。然后在“实时保护”栏目中,将“QQ电脑管家防护”和“系统防护”两项均关闭即可。如果您想完全退出QQ电脑管家,可以直接在任务管理器中结束QQ电脑管家的进程。具体操作步骤如下:按下“Ctrl+Shift+Esc”组合键,打开任务管理器。在“进程”标签页中,找到并选中“QQPCTray.exe”、“QQPCMgr.exe”和“QQPCRTP.exe”三个进程。点击“结束进程”按钮,将这三个进程全部结束即可。需要注意的是,关闭或退出QQ电脑管家可能会影响到电脑的安全性能,建议您在不使用该软件时再进行关闭操作。
2023-07-17 11:37:141

Smoking Gun 歌词

歌曲名:Smoking Gun歌手:Robert Cray专辑:20th Century Masters: The Best Of Robert CrayI get a constant busy signal when I call you on the phoneRobert CrayI get a strong uneasy feeling you"re not sitting there aloneI"m having nasty, nasty visions and baby, you"re in every one one, yeahAnd I"m so afraid I"m gonna find you with that so-called smoking gunMaybe you wanna end it, you"ve had your fill of my kind of funI put 2 and 1 together and we know that"s not an even sumAnd I know just where to catch you with that well-known smoking gunI"m standing here bewildered, I can"t remember just what I"ve doneI can hear the sirens whining, my eyes blinded by the sunI know that I should be running, my heart"s beating just like a drumNow they"ve knocked me down and taken it- that still hot smoking gunhttp://music.baidu.com/song/54578822
2023-07-17 11:37:141