我真的不知道如何处理这种情况.突然之间,我在一个特定的Activity上得到一个OutOfMemoryException,并且每次在我正在开发的游戏中都遵循相同的路径时它是相同的.我在游戏中使用了很多Drawables.我在某处读到你应该经常执行Bitmap.recycle()来释放内存.但我几乎从不直接使用Bitmaps和我使用的Drawabels,我需要它们在屏幕上.
我使用Facebook和Parse SDK可能没有帮助.
现在我正在手机和模拟器上进行开发.在模拟器中,堆大小不能超过30 MB.我应该增加这个数字还是应该单独留下并尝试保持我的应用程序的内存消耗?
直到最近,我才假设,一旦我完成一个Activity并进入另一个,所有内容都将被垃圾收集,我开始新的示例代码:
private void startGamesActivity() {
Intent intent = new Intent(this, SS3GamesActivity.class);
startActivity(intent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
这不是真的吗?让我再详细说明一下.我有一个活动,有两个可能的Facebook播放器ListViews.OutOfMemoryException发生在我点击其中一个开始一个新的活动时,它应该比之前的活动更少的内存消耗!这就是为什么我不明白为什么甚至会发生OutOfMemoryException!在两个ListView收集垃圾后,应该有足够的内存!
所以我现在做的是分析我的堆消耗.我还下载了Eclipse Memory Analyzer.正在使用的最大内存块是1字节数组(byte [],boolean []),其数量为702,总大小为20,096 MB,其中最大值为6,240 MB,平均值为29,314 MB.这让我感到非常惊讶!它甚至没有在整个应用程序中增加很多.但是在仿真器中看到堆大小不会增加超过30MB,因为它有很大的潜力.
使用Eclipse Memory Analyzer它也给了我两个可能的内存泄漏罪魁祸首.
问题可疑1由""加载的"android.graphics.Bitmap"的一个实例占用6.543.416(28,00%)个字节.存储器在由""加载的"byte []"的一个实例中累积.
问题可疑2由""加载的类"android.content.res.Resources"占用5.212.968(22,31%)个字节.内存被累积在由""加载的"java.lang.Object []"的一个实例中.
结果并没有像我想象的那么直接.我认为从类名判断可能的嫌疑人是我的LruCache.我使用它来填充可能的播放器照片的Facebook缩略图,以便每次用户在ListView中滚动时不从网上加载它们.我不确定为什么它在我的应用程序开始时已经很大了.我已经尝试让它变小但没有运气.
这是我的MainActivity的创建:
// caching system
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 16; // used to be 8, didnt help though
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// The cache …Run Code Online (Sandbox Code Playgroud) 我们有一台服务器,偶尔会向我们的用户发送推送.每个用户在Parse中都有自己的频道名称.因为我们的ios和android推送看起来完全不同,我们尝试发送推送两次,一次针对他的频道名称和Android设备,一次针对他的频道名称和ios设备:
$aAndroidPush = array(
"where" => array(
"deviceType" => "Android",
"channels" => array('$in' => array("push_user"))
),
"data" => array(
"action" => "com.android.action",
"alertMessage" => "this is a push",
"t" => "web",
"m" => 0
)
);
$aIOSPush = array(
"where" => array(
"deviceType" => "ios",
"channels" => array('$in' => array("push_user"))
),
"data" => array(
"alert" => "this is a push",
"sound" => "p.mp3",
"t" => "web",
"m" => 0 ,
"badge" => ""
)
);
$aHeaders = array(
"Content-Type: application/json", …Run Code Online (Sandbox Code Playgroud) 显然我不是android或java专家.我想在Android应用中做的是从服务器加载数据.我已经开始使用这部分并附上了源代码.但我想以一种安全的方式做到这一点.作为第一步,而不是http://thisismyurl.com/a.php?action=get我想用这样的用户名/密码http://username:password@thisismyurl.com/a.php?action=get来做:我怎么做?我应该只将用户名和密码部分添加到网址吗?
让我说我已经完成了这将不会有任何用处,因为有人可以打开apk并反编译源代码并获取网址和用户名/密码.那么有一种真正安全的方式吗?
我希望我能在这里得到理解.
String url = "http://thisismyurl.com/a.php?action=get";
String result = Web.executeWeb(url);
public class Web {
public static String executeWeb(final String url) {
final StringBuilder sb = new StringBuilder();
Thread thread = new Thread(new Runnable() {
public void run()
{
try
{
InputStream is = (InputStream) new URL(url).getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String result, line = reader.readLine();
result = line;
while((line=reader.readLine())!=null){
result+=line;
}
sb.append(result);
//System.out.println(result);
//Log.i("My Response :: ", result);
} catch (Exception e)
{ …Run Code Online (Sandbox Code Playgroud) 所以我使用dompdf来创建html的pdf.哪个工作真的很好,唯一的问题是当html太大而dompdf创建它超过两页.是否有一种方法可能在dompdf或html中只能将其缩放到一个页面?
非常感谢帮助!谢谢!
这是我的配置和我创建pdfs的代码.
define("DOMPDF_ENABLE_HTML5PARSER", true);
define("DOMPDF_ENABLE_FONTSUBSETTING", true);
define("DOMPDF_UNICODE_ENABLED", true);
define("DOMPDF_DPI", 120);
define("DOMPDF_ENABLE_REMOTE", true);
require_once 'dompdf/dompdf_config.inc.php';
$dompdf = new \DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper("a4", "portrait");
$dompdf->render();
$dompdf->stream("page.pdf", array("Attachment" => 0));
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中实现了admob插页式广告,一切正常.
Admobs插页式广告是全屏的,这很好,问题是,不知何故,当全屏显示admob插页式广告时,我的应用程序(在后台)也会跳到全屏幕.
现在当有人关闭广告时,应用程序会从全屏幕跳回到正常状态,这看起来像是一个错误,因为它会导致一个小的闪烁效果.
有没有人注意到这种效果,或者我独自一人?
有办法解决这个问题吗?我可以强制我的应用程序保持这种方式而不是跳到全屏?或者我可以在插页式广告上强制显示状态栏吗?
预先感谢!
编辑,我的源代码与此类似(从谷歌本身采取的标准方法):
public class BannerExample extends Activity {
private InterstitialAd interstitial;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create the interstitial.
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(MY_AD_UNIT_ID);
// Create ad request.
AdRequest adRequest = new AdRequest.Builder().build();
// Begin loading your interstitial.
interstitial.loadAd(adRequest);
}
// Invoke displayInterstitial() when you are ready to display an interstitial.
public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我集成了mopub,它也提供全屏插页式广告,有趣的是,即使在应用程序中集成它与admob类似,mopub也不会发生这种情况.所以我敢打赌这是admob的一些奇怪的行为,而不是我的应用程序中的一些错误
我有一个全屏聊天布局,我在顶部有一个带有徽标的标题,然后是一个包含所有聊天消息的listView,在底部我有editText和buttom来发送聊天消息.现在当我点击editText时会发生什么,整个布局被推高了.我需要的是,带有徽标的标题始终保持原样,并且listView可以调整大小.
这不是诀窍:
android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)
这两个:
android:windowSoftInputMode="adjustPan"
Run Code Online (Sandbox Code Playgroud)
也许是因为我有全屏布局?
我需要找到一种不同的方法来调整我的listView一旦键盘存在,任何想法?提前致谢!
这是我的布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="@drawable/ss99_yellow_area_navigation_bar"
android:baselineAligned="false"
android:orientation="horizontal" >
<ImageView
android:id="@+id/back"
android:layout_width="45dp"
android:layout_height="match_parent"
android:layout_marginBottom="10dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:adjustViewBounds="true"
android:clickable="true"
android:src="@drawable/ss99_button_back" />
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="75dp"
android:layout_weight="1"
android:adjustViewBounds="true"
android:src="@drawable/ss99_logo_small" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="-2dp"
android:background="@drawable/ss9_yellow_bar_chat_new" >
<TextView
android:id="@+id/userOpponent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/userUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/userOpponent"
android:layout_alignBottom="@+id/userOpponent"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
<ListView
android:id="@+id/chatList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:divider="#00000000"
android:listSelector="#00000000"
android:layout_weight="1"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll">
</ListView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/ss9_yellow_area_for_bottom_and_chat_string" …Run Code Online (Sandbox Code Playgroud)