Android 需要帮助修复我的课堂:';此处理程序类应该是静态的,否则可能会发生泄漏';
我创建了一个简单的crossfade图像类用于我的应用程序。但是由于缺乏知识,我有一个错误无法修复。我找到了这个帖子,但我不知道如何在课堂上解决这个问题。这是一门非常简单的课。创建、初始化并开始使用它 我希望有人能帮助我修复此警告,在我们处理此警告时,也非常欢迎提供有关我的代码或注释的提示和提示;) MainActivity.javaAndroid 需要帮助修复我的课堂:';此处理程序类应该是静态的,否则可能会发生泄漏';,android,Android,我创建了一个简单的crossfade图像类用于我的应用程序。但是由于缺乏知识,我有一个错误无法修复。我找到了这个帖子,但我不知道如何在课堂上解决这个问题。这是一门非常简单的课。创建、初始化并开始使用它 我希望有人能帮助我修复此警告,在我们处理此警告时,也非常欢迎提供有关我的代码或注释的提示和提示;) MainActivity.java package com.example.crossfadeimage; import android.app.Activity; import android.
package com.example.crossfadeimage;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
Xfade xfade = new Xfade();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// INIT(current activity, image id's, time between fades, fade speed)
xfade.init(this, new int[]{ R.id.image1, R.id.image2, R.id.image3 }, 3000, 500);
xfade.start();
}
}
Xfade.java
package com.example.crossfadeimage;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
public class Xfade {
private Activity activity;
// Handler
private Handler handlerTimer = new Handler();
private static final int UPDATE_STUFF_ON_DIALOG = 999;
private int updateTime;
private Animation fadeIn;
private Animation fadeOut;
public int[] xfadeImages;
public int xfadeCounter = 1;
public void init(Activity thisActivity, int[] images, int time,
int animationSpeed) {
activity = thisActivity;
xfadeImages = images;
updateTime = time;
// Set Animations
fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(animationSpeed);
fadeOut = new AlphaAnimation(1, 0);
fadeOut.setDuration(animationSpeed);
// Hide all images except the first
// which is always visible
for (int image = 1; image < xfadeImages.length; image++) {
ImageView thisImage = (ImageView) activity
.findViewById(xfadeImages[image]);
thisImage.setVisibility(4);
}
}
public void start() {
handlerTimer.removeCallbacks(taskUpdateStuffOnDialog);
handlerTimer.postDelayed(taskUpdateStuffOnDialog, updateTime);
}
private Runnable taskUpdateStuffOnDialog = new Runnable() {
public void run() {
Message msg = new Message();
msg.what = UPDATE_STUFF_ON_DIALOG;
handlerEvent.sendMessage(msg);
// Repeat this after 'updateTime'
handlerTimer.postDelayed(this, updateTime);
}
};
private Handler handlerEvent = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_STUFF_ON_DIALOG: {
crossFade();
}
break;
default: {
super.handleMessage(msg);
}
break;
}
}
};
public void crossFade() {
if (xfadeCounter == 0) {
ImageView lastImage = (ImageView) activity
.findViewById(xfadeImages[xfadeImages.length - 1]);
lastImage.setVisibility(4);
}
if (xfadeCounter < xfadeImages.length) {
ImageView thisImage = (ImageView) activity
.findViewById(xfadeImages[xfadeCounter]);
thisImage.setVisibility(0);
thisImage.startAnimation(fadeIn);
xfadeCounter++;
} else {
// Hide all images except the first
// before fading out the last image
for (int image = 1; image < xfadeImages.length; image++) {
ImageView thisImage = (ImageView) activity
.findViewById(xfadeImages[image]);
thisImage.setVisibility(4);
}
// Fadeout
ImageView lastImage = (ImageView) activity
.findViewById(xfadeImages[xfadeImages.length - 1]);
lastImage.startAnimation(fadeOut);
// LastImage is faded to alpha 0 so it doesn't have to be hidden
// anymore
xfadeCounter = 1;
}
}
}
package com.example.crossfadeimage;
导入android.app.Activity;
导入android.os.Handler;
导入android.os.Message;
导入android.view.animation.AlphaAnimation;
导入android.view.animation.animation;
导入android.widget.ImageView;
公共类Xfade{
私人活动;
//处理者
私有处理程序handlerTimer=新处理程序();
对话框上的私有静态最终整型更新=999;
私有int更新时间;
私人动画;
私人动画淡出;
公共图像;
公共int xfadeCounter=1;
public void init(活动thisActivity,int[]图像,int time,
int动画速度){
活动=此活动;
xfadeImages=图像;
更新时间=时间;
//设置动画
fadeIn=新的字母动画(0,1);
设置持续时间(动画速度);
淡出=新字母动画(1,0);
淡出。设置持续时间(动画速度);
//隐藏除第一个图像以外的所有图像
//它总是可见的
对于(int image=1;image
这允许您修改视图并将处理程序设置为静态
package com.testing.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
public class MainActivity extends Activity implements Runnable {
private static final int THREAD_RESULT = 1000;
private TextView mTextView;
private static Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text);
}
@Override
protected void onResume() {
super.onResume();
mHandler = new CustomHandler(this);
new Thread(this).start();
}
@Override
public void run() {
// Do some threaded work
// Tell the handler the thread is finished
mHandler.post(new Runnable() {
@Override
public void run() {
mHandler.sendEmptyMessage(THREAD_RESULT);
}
});
}
private class CustomHandler extends Handler {
private MainActivity activity;
public CustomHandler(MainActivity activity) {
super();
this.activity = activity;
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case THREAD_RESULT:
activity.mTextView.setText("Success!");
break;
}
}
}
}
请看这里:这与我在问题中的链接完全相同。尝试了此链接,但我收到大量“无法对非静态字段进行静态引用”错误。我不能让它们都是静态的?啊,对了,为你更新了我的答案。实际上,您可能需要考虑使用异步任务来代替。对我来说,它们更有意义,在实现时更容易阅读和理解@腾讯我不确定Runnable界面在这里的用途是什么?我试图复制您的模式(Runnable除外):但我仍然在IncomingHandler构造函数上得到“Handler类应该是静态的”吗?