android - 使用android服务时出现内存不足错误
问题描述
我有一个 android 应用程序,它通过 Volley 从服务器获取一些帖子我想在将新帖子添加到服务器时播放音乐对于这种情况我将旧计数存储在共享的 prefrence 变量中,我每 7 次从服务器获取列表大小第二和比较老伯爵如果他们不同,音乐就会播放
每件事都运行良好,但几个小时后我得到这个内存不足错误:
STACK_TRACE=java.lang.OutOfMemoryError: thread creation failed
at java.lang.VMThread.create(Native Method)
at java.lang.Thread.start(Thread.java:1050)
at com.android.volley.RequestQueue.start(RequestQueue.java:152)
atcom.android.volley.toolbox.Volley.newRequestQueue(Volley.java:79)
atcom.android.volley.toolbox.Volley.newRequestQueue(Volley.java:105)
at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:115)
at dalvik.system.NativeStart.main(Native Method)
这是我的互联网服务代码:
public class InternetService7 extends Service {
StringRequest request;
public int notifNumber;
public int notifNumberOriginal;
Context context1;
Context c2;
SharedPreferences shp;
int number = 0;
int preNumber = 0;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context1 = this;
shp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor shpE = shp.edit();
if (!shp.contains("countNumber")) {
shpE.putInt("countNumber", 10);
shpE.apply();
} else {
}
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
newCount(context1);
} catch (Exception e) {
}
handler.postDelayed(this, 7000);
}
}, 7000);
return START_STICKY;
}
private void newCount(final Context context) {
RequestQueue queue = Volley.newRequestQueue(context);
String url_notf_number = ..
StringRequest stringRequest = new StringRequest(Request.Method.GET, url_notf_number,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
String r = response.substring(0, 14);
String number = r.replaceAll("\\D+", "");
notifNumber = Integer.parseInt(number);
notifNumberOriginal = notifNumber;
c2 = context;
context1 = context;
subCount1();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
stringRequest.setShouldCache(false);
queue.add(stringRequest);
}
private void subCount1() {
try {
int number1 = (shp.getInt("lastNumber", 0));
notifNumber = notifNumber - number1;
if ((notifNumber != preNumber) && notifNumber > 0) {
preNumber = notifNumber;
boolean b = false;
MediaPlayer ourSong = MediaPlayer.create(context1, R.raw.iphone);
ourSong.start();
try {
MainActivity.setMyy("reload");
} catch (Exception e) {
}
} else {
}
} catch (OutOfMemoryError error) {
} catch (Exception e) {
}
}
我不知道我是否正确执行此操作,我将不胜感激
解决方案
推荐阅读
- azure - Azure 获取分配给 Java 服务主体的角色列表
- nginx - 在将纯文本响应输出到 Nginx 上的客户端之前修改它
- angular - 如何避免 Datasource 值在多个扩展的 Mat-Table 行中被覆盖?
- node.js - 如何在节点 js 上使用 image4io
- c# - 目前仅支持 HTTP/1.0 和 HTTP/1.1 版本请求
- postgresql - 如何防止 Postgresql 中链表中的循环引用?
- python - 如何在 jupyter notebook 的另一个环境中使用不同环境的功能?
- android - 从 GCP 下载 Gmaps 样式
- tcl - NS2:数据包不会转发数据
- arrays - i*arr[i] 的最大总和