我需要为我的整个应用程序使用某些字体.我有相同的.ttf文件.是否可以在应用程序启动时将其设置为默认字体,然后在应用程序的其他位置使用它?设置后,如何在布局XML中使用它?
我希望我的按钮文本在Copperplate Gothic Light字体中,但我还没有遇到一个简单的干净代码,因为它具有简单的功能.救命!
PS:由于android自带了ariel和其他一些字体,我们需要导入 (因为我刚接触这个字体而缺少更好的单词)我们希望使用的字体.这就是我迄今为止所能收集到的所有内容,这就是我的最终结果.
OutOfMemoryErrors
即使在确保我的所有位图都已正确缩放之后,我也一直面临着一些烦人的问题.事实上,这个问题似乎与Bitmaps根本没有关系,但我可能错了.
出于测试和错误隔离的目的,我一直在使用导航抽屉(不使用后退按钮)在两个活动之间切换(让我们称之为Main和List).我可以在DDMS中看到每次返回时分配的内存增加大约180 KB.
我已完成内存转储并使用eclipse MAT分析3个不同的时间点:
我怀疑内存泄漏,但我无法找到原因.根据内存转储,它看起来像是"剩余"并且java.lang.FinalizerReference
不断增加.这个问题的用户在FinalizerReferences
他的内存转储中也有很多,但答案还不是很清楚.
我在最后一个时间点提出的泄漏嫌疑人报告并不是很有帮助,因为它怀疑android.content.res.Resources
并且android.graphics.Bitmap
随着时间的推移似乎没有增长:
在其中一份报告中(遗憾的是,这里没有),我看到13个被android.widget.ListView
指出为潜在泄密嫌疑人的实例.
这些内存增加发生在活动之间的任何转换(不仅仅是本例中使用的Main和List).
如何找到(非显而易见的?)内存泄漏?我一直在摸不着头脑,所以任何帮助和提示都会很棒.
位图(@ OrhanC1):我已经评论Bitmap
了上面提到的两个活动中的任何实例,内存仍在增加.内存转储仍显示一些位图,但我相信它们与资源有关,而不是我分配的实际位图.
关于自定义字体(@erakitin):我正在使用它们,但我使用单例Typeface
在我的Application
上下文(public class MyApp extends Application
)中保留每个字体的单个实例.我已经尝试评论上面提到的两个活动中对字体的任何引用,内存仍然增加.
我不认为我正在泄漏Context
(@DigCamara):我没有在这两个活动中持有任何静态引用,我使用Application
上下文而不是Activity
在适配器中的's.如果我保持相同Activity
并进行一些屏幕旋转,则内存不会增加.
基于@ NickT的评论:我可以看到我有两个活动的很多实例.这些内存增加是否只是后端堆栈活动数量增加而不是内存泄漏的结果(虽然操作系统处理的内容显然没有)?如果我使用FLAG_ACTIVITY_REORDER_TO_FRONT
intent标志,那么内存只会增加,直到所有不同的活动都被实例化(一次).这个问题很有用:当内存不足时,Android不会从堆栈中查杀活动.
我已经构建了一个显示天气数据的Android应用程序(如果你想测试问题,我可以私下给你一个应用程序名称).用户可以从一天浏览到另一天以查看特定日期的天气.
我的应用程序使用片段(单个MainActivity和导航抽屉调用特定片段).
DayPagerFragment
使用ViewPager
具有无限数量的页面(动态片段).页面代表一天.
DayPagerFragment
public class DayPagerFragment extends Fragment {
private ViewPager mViewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_day, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(1);
mViewPager.setAdapter(new DayAdapter(getChildFragmentManager()));
}
private static class DayAdapter extends FragmentStatePagerAdapter {
public DayAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return DayFragment.newInstance(null);
}
@Override
public int getCount() {
// I don't …
Run Code Online (Sandbox Code Playgroud) android memory-leaks android-imageview android-fragments android-viewpager